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 2012

あなたの質問は何ですか?!=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
私はVBAに少し<> ""
慣れ

6
この答えを裏付ける面白い事実:Visual BasicとPascal言語は、最初に文字列を格納し、その直後にコンテンツ自体を格納します。一方、Cベースの言語とJava言語は長さを格納せず、文字列が終了したことを知らせる '\ 0'(null)ターミネータを備えています。そのため、VBAで長さを取得するのは高速です。つまり、メモリから整数を読み取るだけであり、Javaでは低速です。文字列を反復処理する必要があります。
Paulo Avelar、2016

1
@LimaNightHawkの方がはるかに効率的ですか?詳しく説明していただけますか?最近のほとんどのコンパイラはパターン<> ""をキャッチし、と同じpコードを生成すると思いますLen(str)
Roland

@Rolandこれは、VBAが文字列をメモリに格納する方法に関係しています。詳細についてはGoogleにお任せしますが、文字列の格納方法の一部は、最初のバイトが文字列の長さを格納し、次のバイトが文字を格納することです[3][C][A][T]。「空の」文字列は[0]最初のバイトにa があり、をチェックLenすると、コードで整数をチェックして比較するだけで済みます。さらに、= ""その2番目を実行する場合、""最初にメモリ内で独自の文字列として割り当て、次にターゲット文字列と比較する必要があります。
LimaNightHawk 2017年

@Roland:それは簡単な最適化ですが、どうやら、VBAコンパイラーはそれをしていません。誰かがベンチマークを行った結果、1,000万回のLen(str) > 0約2倍の速さstr <> ""でした。とは言っても、ここでは極端なマイクロ最適化(0.30秒vs 0.72秒、1,000万回の反復)について話しているので、より読みやすいものに固執しますstr <> ""
ハインツィ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.