Что эквивалентно «! =» В Excel VBA?


95

Проблема в том, что !=не работает функция в excel vba.

Я хочу иметь возможность использовать

If strTest != "" Then вместо того If strTest = "" Then

Есть ли другой подход к этому !=?

Моя функция мимических !=IS

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
Вы уверены, что это !=и нет <>?
dasblinkenlight

Какой у Вас вопрос? Почему !=не работает в vba, или что такое оператор неравенства в vba?
GSerg

Ответы:


154

Поскольку оператор неравенства в VBA имеет вид <>

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

оператор !=используется в C #, C ++.


28

В VBA !=оператором является Notоператор, например:

If Not strTest = "" Then ...

5
Это неверно. Notявляется оператором логической инверсии, который соответствует !в языках C-стиля.
Zev Spitz

7

Просто примечание. Если вы хотите сравнить строку "", в вашем случае используйте

If LEN(str) > 0 Then

или даже просто

If LEN(str) Then

вместо.


6
Я знаю, что для людей, <> ""
плохо знакомых

6
Интересный факт, подтверждающий этот ответ: языки Visual Basic и Pascal хранят строки с указанием их длины в начале и самого содержимого сразу после этого. С другой стороны, языки на основе C и Java не хранят длину и имеют признак конца строки '\ 0' (ноль), сигнализирующий о завершении строки. Из-за этого получение длины в VBA происходит быстро - он просто читает целое число из памяти - и медленно в Java - вам нужно перебирать строку.
Пауло Авелар

1
@LimaNightHawk намного эффективнее? Не могли бы вы рассказать об этом подробнее? Я предполагаю, что большинство современных компиляторов поймают шаблон <> ""и выдадут тот же p-код, что и Len(str).
Роланд

@Roland Это связано с тем, как VBA хранит строки в памяти. Я дам вам Google для более полного объяснения, но в общем, часть того , как строки хранятся в том , что первые байты хранения длины строки, то следующие байты хранить символы: [3][C][A][T]. «Пустая» строка имеет [0]первые байты, и проверка Lenпозволяет коду просто проверять и сравнивать целые числа. Кроме того, когда вы делаете это, = ""эта вторая ""должна сначала выделяться как собственная строка в памяти, а затем сравниваться с вашей целевой строкой.
LimaNightHawk

@Roland: Это была бы простая оптимизация, но, по-видимому, компилятор VBA этого не делает. Кто-то провел тест с результатом Len(str) > 0примерно в два раза быстрее, чем str <> ""за 10 миллионов итераций. Тем не менее, мы говорим здесь об экстремальной микрооптимизации (0,36 против 0,72 секунды для 10 миллионов итераций), поэтому я определенно буду придерживаться более удобочитаемой str <> "".
Heinzi

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.