¿Cuál es el equivalente de "! =" En Excel VBA?


95

El problema es que !=no funciona como función en excel vba.

Quiero poder usar

If strTest != "" Then en vez de If strTest = "" Then

¿Hay otro enfoque para hacer esto además !=?

Mi función para imitar !=es

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
¿Estás seguro de que lo es !=y no <>?
dasblinkenlight

¿Cuál es tu pregunta? ¿ !=Por qué no funciona en vba, o cuál es el operador de desigualdad en vba?
GSerg

Respuestas:


154

Porque el operador de desigualdad en VBA es <>

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

el operador !=se usa en C #, C ++.


28

En VBA, el !=operador es el Notoperador, así:

If Not strTest = "" Then ...

5
Esto es incorrecto. Notes el operador de inversión lógica, que corresponde a !en los lenguajes de estilo C.
Zev Spitz

7

Solo una nota. Si desea comparar una cadena con "", en su caso, use

If LEN(str) > 0 Then

o incluso solo

If LEN(str) Then

en lugar.


6
Sé que para las personas algo nuevas en VBA, esta respuesta puede parecer extraña, pero, lo crea o no, es MUCHO más eficiente que verificarlo<> ""
LimaNightHawk

6
Dato curioso para respaldar esta respuesta: los lenguajes Visual Basic y Pascal almacenan cadenas con su longitud al principio y el contenido en sí inmediatamente después de eso. Los lenguajes basados ​​en C y Java, por otro lado, no almacenan la longitud y tienen el terminador '\ 0' (nulo) para indicar que la cadena terminó. Por eso, obtener la longitud en VBA es rápido, solo está leyendo un número entero de la memoria, y es lento en Java, necesita iterar a través de la cadena.
Paulo Avelar

1
@LimaNightHawk ¿ mucho más eficiente? ¿Puede dar más detalles sobre eso, por favor? Supongo que la mayoría de los compiladores modernos captarían el patrón <> ""y producirían el mismo código p que Len(str).
Roland

@Roland Esto tiene que ver con la forma en que VBA almacena cadenas en la memoria. Voy a dejar que Google para una explicación más completa, pero en fin, parte de cómo se almacenan las cadenas es que los primeros bytes almacenan la longitud de la cadena, y los siguientes bytes almacenan los caracteres: [3][C][A][T]. Una cadena "vacía" tiene un [0]para los primeros bytes y la verificación Lenpermite que el código simplemente verifique y compare enteros. Además, cuando lo hace, = ""ese segundo ""debe asignarse como su propia cadena primero en la memoria, luego se debe comparar con la cadena de destino.
LimaNightHawk

@Roland: Esa sería una optimización fácil, pero, aparentemente, el compilador de VBA no lo hace. Alguien hizo un punto de referencia con el resultado que Len(str) > 0es aproximadamente el doble de rápido que str <> ""para 10 millones de iteraciones. Dicho esto, estamos hablando de una microoptimización extrema aquí (0.36 vs 0.72 segundos para 10 millones de iteraciones), así que definitivamente me quedaré con la más legible str <> "".
Heinzi

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.