Qual è l'equivalente di "! =" In Excel VBA?


95

Il problema è che !=non funziona come una funzione in excel vba.

Voglio essere in grado di usare

If strTest != "" Then invece di If strTest = "" Then

C'è un altro approccio per farlo oltre !=?

La mia funzione di imitare !=è

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
Sei sicuro che sia !=e no <>?
dasblinkenlight

Qual è la tua domanda? Perché !=non funziona in vba o qual è l'operatore di disuguaglianza in vba?
GSerg

Risposte:


154

Perché l'operatore di disuguaglianza in VBA è <>

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

l'operatore !=è utilizzato in C #, C ++.


28

In VBA, l' !=operatore è l' Notoperatore, in questo modo:

If Not strTest = "" Then ...

5
Questo non è corretto. Notè l'operatore di inversione logica, che corrisponde a !nei linguaggi in stile C.
Zev Spitz

7

Solo una nota. Se vuoi confrontare una stringa con "", nel tuo caso, usa

If LEN(str) > 0 Then

o anche solo

If LEN(str) Then

anziché.


6
So che le persone un po 'nuove a VBA, questa risposta può sembrare strana, ma questo, che ci crediate o no, è MOLTO più efficiente rispetto al controllo<> ""
LimaNightHawk

6
Fatto divertente per sostenere questa risposta: i linguaggi Visual Basic e Pascal memorizzano le stringhe con la loro lunghezza all'inizio e il contenuto stesso subito dopo. I linguaggi C-based e Java, d'altra parte, non memorizzano la lunghezza e hanno il terminatore '\ 0' (null) per segnalare che la stringa è terminata. Per questo motivo, ottenere la lunghezza in VBA è veloce - sta solo leggendo un numero intero dalla memoria - ed è lento in Java - è necessario iterare attraverso la stringa.
Paulo Avelar

1
@LimaNightHawk molto più efficiente? Puoi approfondire questo per favore? Immagino che la maggior parte dei compilatori moderni catturerebbe il pattern <> ""e produrrebbe lo stesso p-code di Len(str).
Roland

@Roland Questo ha a che fare con il modo in cui VBA memorizza le stringhe in memoria. Ti lascio Google per una spiegazione più completa, ma in breve, parte di come le stringhe sono memorizzati è che il primo byte memorizzano la lunghezza della stringa, quindi i seguenti byte memorizzare i caratteri: [3][C][A][T]. Una stringa "vuota" ha un [0]per i primi byte e il controllo di Lenconsente al codice di controllare e confrontare i numeri interi. Inoltre, quando si esegue un'operazione, = ""quel secondo ""deve essere allocato prima come stringa in memoria, quindi confrontato con la stringa di destinazione.
LimaNightHawk

@Roland: Sarebbe un'ottimizzazione facile, ma, a quanto pare, il compilatore VBA non lo fa. Qualcuno ha fatto un benchmark con il risultato che Len(str) > 0è circa il doppio più veloce rispetto str <> ""a 10 milioni di iterazioni. Detto questo, stiamo parlando di micro-ottimizzazione estrema qui (0,36 contro 0,72 secondi per 10 milioni di iterazioni), quindi continuerò sicuramente con il più leggibile str <> "".
Heinzi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.