compter une chaîne de texte dans des feuilles non consécutives

2

Dans Excel 2003, je posais une question sur le comptage d'une chaîne de texte Man dans les feuilles nommées 001R à 900R, dans la même cellule C8 de toutes les feuilles.

J'ai la réponse suivante

=SUMPRODUCT(COUNTIF(INDIRECT("'"&ROW(INDIRECT(001&":"&900))&"R"&"'!C8"),"*Man*"))

Cela fonctionne parfaitement lorsque les feuilles sont toutes présentes. Mais lorsque vous utilisez la formule ci-dessus alors que toutes les feuilles ne sont pas encore présentes, cela donne une erreur, car j'ai des noms de feuille de calcul comme

001R 002R 003S 004R 101R 102S 103R 210R 211R 305R 306S 307R 401R 402R 403S 404R

et ainsi de suite pour environ 300 feuilles. Les numéros de feuilles manquants seront ajoutés ultérieurement, au fur et à mesure de la disponibilité des données.

Existe-t-il un moyen d'utiliser une formule qui englobe tous les nombres pour inclure les noms de feuille actuels et futurs possibles, afin d'éviter de modifier la formule à chaque fois qu'une nouvelle feuille est ajoutée?

@ Gary's Student a une réponse très utile. Mais je veux compter le texte dans une liste déroulante avec de nombreux éléments, et je veux compter l'occurrence de chacun. Avec votre technique, devrais-je créer un module UDF pour chaque article; ou y at-il un moyen de faire cela.

De plus, j'ai des feuilles avec S non R attachées à leur numéro. Y a-t-il un moyen de les compter aussi? Je veux dire est-il un moyen de faire

shName = Format(i, "000") & "R"

et

If InStr(1, cel, "Man") as variables entered in =SpecialSum(C8).
Hany0
la source
Quelle était votre question initiale? un lien vers cela aiderait à comprendre votre actuel.
Máté Juhász
Puis-je demander pourquoi: a) vous publiez ce message sur plusieurs forums? b) Vous n’avez pas encore répondu à une réponse exceptionnelle qui vous a été adressée sur un autre forum il ya 5 jours: ( mrexcel.com/forum/excel-questions/… )?
XOR LX
@ Hany0, avez-vous créé deux comptes? Fusionnez-les
jeu de mots

Réponses:

0

La fonction définie par l'utilisateur suivante examinera votre bloc de feuilles de calcul. Si la feuille existe, la cellule d'intérêt est examinée pour voir si elle contient la chaîne Man . Si la chaîne est présente, le compte est incrémenté:

Public Function SpecialSum(rin As Range) As Long
   Dim addy As String, i As Long, shName As String
   Dim cel As String
   Application.Volatile

   addy = rin.Address

   For i = 1 To 900
      shName = Format(i, "000") & "R"
      On Error Resume Next
         cel = Sheets(shName).Range(addy).Text
         If Err.Number = 0 Then
            If InStr(1, cel, "Man") > 0 Then SpecialSum = SpecialSum + 1
         Else
            Err.Number = 0
         End If
      On Error GoTo 0
   Next i

End Function

Les fonctions définies par l'utilisateur (UDF) sont très faciles à installer et à utiliser:

  1. ALT-F11 ouvre la fenêtre VBE
  2. ALT-I ALT-M ouvre un nouveau module
  3. collez le contenu et fermez la fenêtre VBE

Si vous enregistrez le classeur, la fonction utilisateur est enregistrée avec celui-ci. Si vous utilisez une version d'Excel ultérieure à 2003, vous devez enregistrer le fichier au format .xlsm au lieu de .xlsx.

Pour supprimer le fichier UDF:

  1. afficher la fenêtre VBE comme ci-dessus
  2. effacer le code
  3. ferme la fenêtre VBE

Pour utiliser le fichier UDF d'Excel:

=SpecialSum(C8)

C8 est la cellule d'intérêt. Pour en savoir plus sur les macros en général, voir:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

et

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

et pour plus de détails sur les FDU, voir:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

Les macros doivent être activées pour que cela fonctionne!

Cela vous permettra d'ajouter / supprimer des feuilles de calcul sans modifier la formule.

Gary's Student
la source