Що еквівалентно “! =” В Excel VBA?


95

Проблема в тому, що !=вона не працює як функція в Excel vba.

Я хочу мати можливість використовувати

If strTest != "" Then замість If strTest = "" Then

Чи існує інший підхід, щоб зробити це крім цього !=?

Моя функція імітувати !=-

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.
Зев Шпіц

7

Просто примітка. Якщо ви хочете порівняти рядок із "", у вашому випадку, використовуйте

If LEN(str) > 0 Then

або навіть просто

If LEN(str) Then

замість цього.


6
Я знаю людям дещо новим для VBA, ця відповідь може здатися дивним, але це, вірте чи ні, <> ""
НАДАЛЕ

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

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

@Roland Це пов'язано з тим, як VBA зберігає рядки в пам'яті. Я дам вам Google для більш повного пояснення, але в загальному, частина того , як рядки зберігаються в тому , що перші байти зберігання довжини рядка, то наступні байти зберігати символи: [3][C][A][T]. "Порожній" рядок має a [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.