Si Et Ou Plusieurs Instructions en VBA
Je veux redistribuer un fichier Excel avec 14 Colonnes de la Colonne correcte (avec 12.000 lignes).
Pour cela, je dois utiliser certains Si Et Ou des Déclarations à mettre les numéros dans une matrice. Mais apparemment je n'ai pas le droit de sortir.
Il fait toutes mes cellules zéro, tandis que les cellules avec une valeur doit conserver la valeur.
Où dois-je aller mal?:
For i = 1 To LastRow
If Cells(i, 8).Value2 = "" Then Cells(i, 8).Value2 = 0
If Cells(i, 1).Value2 < 437 And Cells(i, 5).Value2 = "aa" _
Or Cells(i, 5).Value2 = "bb" _
Or Cells(i, 5).Value2 = "cc" _
Or Cells(i, 5).Value2 = "dd" _
Or Cells(i, 5).Value2 = "ee" _
Or Cells(i, 5).Value2 = "ff" _
Or Cells(i, 5).Value2 = "gg" _
And Cells(i, 7).Value2 = "" _
Then Cells(i, 7).Value2 = 0
Next i
Donc, si la cellule contient un aa ou bb ou cc ou dd ou ee ou ff ou gg et est empthy la cellule doit devenir 0 dans le cas contraire, il devrait rester la même valeur. Après il faut aller dans une matrice
Then Matrixgetallen(i, 2) = CDbl(Cells(i, 7).Value2)
Mais je n'ai pas réussi à obtenir que dans le même si l'instruction.
Si ont 6 de ce genre de Si-états, et donc probablement Si Alors Sinon ne fonctionne pas.
- Il est la priorité de l'opérateur aussi avec des opérateurs booléens. ET a eminence en face OU. Utilisez des parenthèses pour marquer les opérations booléennes qui va ensemble.
- Pouvez-vous me donner une (courte) exemple de clearify ce que tu veux dire?
- Comme il est maintenant, votre Si est vrai si
(Cells(i, 1).Value2 < 437 And Cells(i, 5).Value2 = "aa") Or...Or...Or...(Cells(i, 5).Value2 = "gg" And Cells(i, 7).Value2 = "")
parce que Et ce, avant Ou.
Vous devez vous connecter pour publier un commentaire.
À optimiser sans voir ton code complet, mais pour cette partie:
AND
en deuxIF
s que VBA ne pas court-circuitOR
s, le faire d'un seul coup d'essai contre un tableau (numérique résulte de la chaîne exacte est trouvée)code
Merci pour l'astuce Axel. Je n'ai jamais vu cela avant, mais il fonctionne très bien! Cela a fait le tour:
Mais j'aime aussi les réponses de Brett . C'est une belle nouvelle façon de l'aborder.
IF a AND b AND (c OR d OR e OR f) THEN g
. En mettant le non entre parenthèses clauses d'abord, il fait un peu plus facile à lire. Aussi, vous pouvez utiliser le retrait des lignes de continuation pour aider vos yeux à la cueillir à la sortie, ainsi. Lorsque vous (ou quelqu'un d'autre) vient à travers ce code dans les 6 mois, qui va interpréter le code plus facile pour l'œil, sans faire aucune différence dans l'exécution. (Oui, je comprends que vous êtes allé avec l'autre réponse, juste quelques conseils amicaux.)