Count mots dans Excel VBA
Ci-dessous, nous examinerons un programme dans Excel VBA qui compte le nombre de mots dans une gamme sélectionnée. Un ou plusieurs espaces sont supposés mots séparés.
Situation:
-
Tout d’abord, nous déclarons deux objets Range et trois variables. Nous appelons les objets Range RNG et la cellule. Une variable entier que nous appelons cellWords, une variable entier que nous appelons totalWords, et une variable de chaîne que nous appelons contenu.
Dim rng As Range, cell As Range Dim cellWords, totalWords As Integer, content As String
-
Nous initialisons l’objet Range RNG avec la plage sélectionnée et les deux variables de type entier ayant une valeur 0.
Set rng = Selection cellWords = 0 totalWords = 0
-
Nous voulons vérifier chaque cellule dans une plage sélectionnée au hasard (cette gamme peut être de toute taille). Dans Excel VBA, vous pouvez utiliser la boucle For Each suivante pour cela. Ajoutez les lignes de code suivantes:
For Each cell In rng Next cell
Note: RNG et cellules sont choisies au hasard ici, vous pouvez utiliser tous les noms.
N’oubliez pas de se référer à ces noms dans le reste de votre code.
-
Ensuite, nous déterminons pour chaque cellule dans cette gamme combien de mots qu’il contient. Pour ignorer une cellule qui contient une formule, ajoutez la ligne de code suivante entre pour chacun et suivant (seulement si cell.HasFormula est faux, nous continuons).
If Not cell.HasFormula Then End If
-
Tout d’abord, nous écrivons le contenu de la cellule au contenu variable.
Ensuite, nous enlevons les espaces au début et à la fin (s’il y en a). Dans Excel VBA, vous pouvez utiliser la fonction Trim pour cela. Par exemple, « excel vba » sera converti en « Excel vba ». Ajoutez les lignes de code ci-dessous dans votre déclaration Si.
content = cell.Value content = Trim(content)
Remarque: la fonction VBA dans Excel garniture ne supprime pas d’espaces supplémentaires entre les mots, mais c’est OK dans cet exemple.
-
À ce stade, une cellule peut encore être vide. Si la cellule est vide, nous attribuons la valeur 0 à la cellWords variable. Dans le cas contraire, il contient au moins un mot et nous attribuer la valeur 1 à la cellWords variable. Ajoutez les lignes de code ci-dessous dans votre déclaration Si.
If content = "" Then cellWords = 0 Else cellWords = 1 End If
Une cellule peut contenir plus d’un mot bien sûr. C’est exactement ce que nous voulons savoir maintenant. À titre d’exemple, nous prenons: « Excel vba ». Si une cellule contient au moins un espace à ce stade, il contient au moins un mot de plus. Vous pouvez utiliser la fonction VBA dans Excel instr pour trouver un espace.
Instr (contenu, » « ) trouve la position du premier espace dans le contenu.
-
Nous allons utiliser la structure de boucle Do While. Le code placé entre ces mots (à l’étape 8, 9 et 10) sera répété aussi longtemps que la partie après Do While est vrai. Nous voulons répéter ces étapes tant que instr (contenu, » « )> 0 est vrai (tant que le contenu contient un espace et donc plus de mots). Ajouter la boucle Do While dans votre déclaration Si.
Do While InStr(content, " ") > 0 Loop
-
Ensuite, nous prenons la part de départ contenu à la position du premier espace. Nous utilisons la fonction Mid pour cela.
content = Mid(content, InStr(content, " "))
Par exemple: Mid ( « Excel vba », InStr ( « Excel vba », » « )) donnera » ABV ».
-
Nous TRIM la chaîne à nouveau.
content = Trim(content)
Résultat: « ABV »
-
Nous cellWords par incrément 1.
cellWords = cellWords + 1
Cette boucle Do While sera répété aussi longtemps que le contenu contient un espace et donc plus de mots. Dans notre exemple, nous sortons de la boucle Do While puisque « ABV » ne contient pas un espace plus! Résultat: cette cellule contient 2 mots.
-
Après avoir vérifié une cellule, nous ajoutons cellWords aux totalWords variables. Cette ligne de code doit être placé en dehors de la boucle Do While mais dans l’instruction if.
totalWords = totalWords + cellWords
Le processus recommence pour la cellule suivante jusqu’à ce que toutes les cellules ont été vérifiées.
-
Enfin, nous affichons la valeur de totalWords à l’aide d’un msgbox. Cette ligne de code doit être placé en dehors de la boucle For Each suivante.
MsgBox totalWords & " words found in the selected range."
-
Tester le programme.
Résultat: