Quel est l'équivalent de «! =» Dans Excel VBA?


95

Le problème est que !=cela ne fonctionne pas en tant que fonction dans Excel VBA.

Je veux pouvoir utiliser

If strTest != "" Then au lieu de If strTest = "" Then

Y a-t-il une autre approche pour faire cela en plus !=?

Ma fonction d'imiter !=est

Sub test()

Dim intTest As Integer
Dim strTest As String

intTest = 5

strTest = CStr(intTest) ' convert

Range("A" + strTest) = "5"



    For i = 1 To 10
        Cells(i, 1) = i

        If strTest = "" Then
            Cells(i, 1) = i
        End If

    Next i


End Sub

1
Etes-vous sûr que oui !=et non <>?
dasblinkenlight

Quelle est ta question? Pourquoi !=ne fonctionne pas dans vba, ou quel est l'opérateur d'inégalité dans vba?
GSerg

Réponses:


154

Parce que l'opérateur d'inégalité dans VBA est <>

If strTest <> "" Then
    .....

l'opérateur !=est utilisé en C #, C ++.


28

Dans VBA, l' !=opérateur est l' Notopérateur, comme ceci:

If Not strTest = "" Then ...

5
Ceci est une erreur. Notest l'opérateur d'inversion logique, qui correspond à !dans les langages de style C.
Zev Spitz

7

Juste une note. Si vous souhaitez comparer une chaîne avec "", dans votre cas, utilisez

If LEN(str) > 0 Then

ou même juste

If LEN(str) Then

au lieu.


6
Je sais que pour les gens quelque peu novices en VBA, cette réponse peut sembler étrange, mais cela, croyez-le ou non, est BEAUCOUP plus efficace que de vérifier contre<> ""
LimaNightHawk

6
Fait amusant pour étayer cette réponse: les langages Visual Basic et Pascal stockent les chaînes avec leur longueur au début et le contenu lui-même juste après. Les langages C et Java, par contre, ne stockent pas la longueur et ont le terminateur '\ 0' (nul) pour signaler que la chaîne s'est terminée. Pour cette raison, obtenir la longueur en VBA est rapide - il s'agit simplement de lire un entier de la mémoire - et est lent en Java - vous devez parcourir la chaîne.
Paulo Avelar

1
@LimaNightHawk beaucoup plus efficace? Pouvez-vous nous en dire plus? Je suppose que la plupart des compilateurs modernes captureraient le modèle <> ""et produiraient le même p-code que Len(str).
Roland

@Roland Cela a à voir avec la façon dont VBA stocke les chaînes en mémoire. Je vais vous laisser Google pour une explication plus complète, mais en bref, une partie de la façon dont les chaînes sont stockées est que les premiers octets stockent la longueur de la chaîne, les octets stockent les caractères suivants: [3][C][A][T]. Une chaîne "vide" a un [0]pour les premiers octets et la vérification du Lenpermet au code de simplement vérifier et comparer des nombres entiers. En outre, lorsque vous effectuez un, = ""cette seconde ""doit d'abord être allouée comme sa propre chaîne en mémoire, puis comparée à votre chaîne cible.
LimaNightHawk

@Roland: Ce serait une optimisation facile, mais, apparemment, le compilateur VBA ne le fait pas. Quelqu'un a fait un benchmark avec le résultat qui Len(str) > 0est environ deux fois plus rapide que str <> ""pour 10 millions d'itérations. Cela dit, nous parlons ici de micro-optimisation extrême (0,36 contre 0,72 seconde pour 10 millions d'itérations), donc je vais certainement m'en tenir à la plus lisible str <> "".
Heinzi le

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.