O que é equivalente a “! =” No Excel VBA?


95

O problema é que !=não funciona como função no excel vba.

Eu quero ser capaz de usar

If strTest != "" Then ao invés de If strTest = "" Then

Existe outra abordagem para fazer isso !=?

Minha função de imitar !=é

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
Tem certeza que é !=e não é <>?
dasblinkenlight

Qual é a sua dúvida? Por !=que não funciona em vba, ou qual é o operador de desigualdade em vba?
GSerg

Respostas:


154

Porque o operador de desigualdade no VBA é <>

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

o operador !=é usado em C #, C ++.


28

No VBA, o !=operador é o Notoperador, assim:

If Not strTest = "" Then ...

5
Isso está incorreto. Noté o operador de inversão lógica, que corresponde a !em linguagens de estilo C.
Zev Spitz

7

Apenas uma nota. Se você quiser comparar uma string com "", no seu caso, use

If LEN(str) > 0 Then

ou mesmo apenas

If LEN(str) Then

em vez de.


6
Eu sei que para as pessoas um pouco novas no VBA, essa resposta pode parecer estranha, mas isso, acredite ou não, é MUITO mais eficiente do que verificar<> ""
LimaNightHawk

6
Fato engraçado para apoiar esta resposta: as linguagens Visual Basic e Pascal armazenam strings com seu comprimento no início e o próprio conteúdo logo em seguida. As linguagens baseadas em C e Java, por outro lado, não armazenam o comprimento e têm o terminador '\ 0' (nulo) para sinalizar que a string terminou. Por causa disso, obter o comprimento em VBA é rápido - é apenas ler um número inteiro da memória - e é lento em Java - você precisa iterar através da string.
Paulo Avelar

1
@LimaNightHawk muito mais eficiente? Você pode elaborar sobre isso, por favor? Eu acho que a maioria dos compiladores modernos pegaria o padrão <> ""e produziria o mesmo código-p que Len(str).
Roland

@Roland Isso tem a ver com como o VBA armazena strings na memória. Eu vou deixar você Google para uma explicação mais completa, mas em suma, parte de como cordas são armazenados é que os primeiros bytes armazenar o comprimento da corda, em seguida, os seguintes bytes armazenar os caracteres: [3][C][A][T]. Uma string "vazia" tem um [0]para os primeiros bytes e a verificação de Lenpermite que o código apenas verifique e compare números inteiros. Além disso, quando você faz um, = ""aquele segundo ""deve ser alocado como sua própria string primeiro na memória e, em seguida, comparado à string de destino.
LimaNightHawk

@Roland: Essa seria uma otimização fácil, mas, aparentemente, o compilador VBA não faz isso. Alguém fez um benchmark com o resultado que Len(str) > 0é cerca de duas vezes mais rápido do que str <> ""para 10 milhões de iterações. Dito isso, estamos falando de micro-otimização extrema aqui (0,36 contra 0,72 segundos para 10 milhões de iterações), então, definitivamente, ficarei com a mais legível str <> "".
Heinzi

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.