Was entspricht "! =" In Excel VBA?


95

Das Problem ist, dass !=es in Excel VBA nicht als Funktion funktioniert.

Ich möchte verwenden können

If strTest != "" Then anstatt If strTest = "" Then

Gibt es einen anderen Ansatz, um dies zu tun !=?

Meine Funktion zu imitieren !=ist

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
Bist du sicher, dass es so ist !=und nicht <>?
Dasblinkenlight

Was ist deine Frage? Warum !=funktioniert in vba nicht oder was ist der Ungleichungsoperator in vba?
GSerg

Antworten:


154

Weil der Ungleichungsoperator in VBA ist <>

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

Der Operator !=wird in C #, C ++ verwendet.


28

In VBA ist der !=Operator der NotOperator wie folgt :

If Not strTest = "" Then ...

4
Das ist falsch. Notist der logische Inversionsoperator, der !in Sprachen im C-Stil entspricht.
Zev Spitz

7

Nur eine Notiz. Wenn Sie eine Zeichenfolge mit ""in Ihrem Fall vergleichen möchten , verwenden Sie

If LEN(str) > 0 Then

oder auch nur

If LEN(str) Then

stattdessen.


6
Ich weiß für Leute, die etwas neu in VBA sind, diese Antwort mag seltsam erscheinen, aber das, <> ""
ob Sie

6
Unterhaltsame Tatsache, um diese Antwort zu unterstützen: In den Sprachen Visual Basic und Pascal werden Zeichenfolgen mit ihrer Länge am Anfang und dem Inhalt selbst direkt danach gespeichert. C-basierte und Java-Sprachen hingegen speichern die Länge nicht und haben den Terminator '\ 0' (null), um zu signalisieren, dass die Zeichenfolge beendet wurde. Aus diesem Grund ist das Abrufen der Länge in VBA schnell - es liest nur eine Ganzzahl aus dem Speicher - und in Java ist es langsam - Sie müssen die Zeichenfolge durchlaufen.
Paulo Avelar

1
@LimaNightHawk weitaus effizienter? Können Sie das bitte näher erläutern? Ich denke, dass die meisten modernen Compiler das Muster erfassen <> ""und den gleichen P-Code wie erzeugen würden Len(str).
Roland

@ Roland Dies hat damit zu tun, wie VBA Zeichenfolgen im Speicher speichert. Ich lasse Sie Google für eine ausführlichere Erklärung, aber kurz gesagt, ein Teil der Speicherung von Zeichenfolgen besteht darin, dass die ersten Bytes die Länge der Zeichenfolge und die folgenden Bytes die Zeichen speichern : [3][C][A][T]. Eine "leere" Zeichenfolge hat eine [0]für die ersten Bytes und das Überprüfen der Lenermöglicht es dem Code, nur Ganzzahlen zu überprüfen und zu vergleichen. Wenn Sie dies tun = "", muss diese Sekunde außerdem ""zuerst im Speicher als eigene Zeichenfolge zugewiesen und dann mit Ihrer Zielzeichenfolge verglichen werden.
LimaNightHawk

@ Roland: Das wäre eine einfache Optimierung, aber anscheinend macht der VBA-Compiler das nicht. Jemand hat einen Benchmark mit dem Ergebnis durchgeführt, Len(str) > 0das ungefähr doppelt so schnell ist wie str <> ""bei 10 Millionen Iterationen. Das heißt, wir sprechen hier von extremer Mikrooptimierung (0,36 vs 0,72 Sekunden für 10 Millionen Iterationen), also bleibe ich definitiv bei der besser lesbaren str <> "".
Heinzi

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.