2017-12-03 6 views
3

これは愚かな質問ですが、(Excel VBA)AND関数はすべての単一条件をチェックして処理を続行するか、最初のFALSE条件で停止してもう一方をチェックしませんか?私は最適化の目的のために知りたいと思うし、これまでのところWeb上で何も見つかりませんでした..事前に感謝!VBAではどのようにAND関数が機能しますか?

例:InStr関数(TXT、 "ABC")> 0とInStr関数( "XYZ" TXT、)> 0次に

ので、 "ABC" はTXT変数で見つかっていない場合は( '偽' を与えた場合)マクロが "xyz"をチェックするか、または残りの条件をスキップします

答えて

5

VBAが行くを続けていることが表示されます:

Sub ANDTest() 
    If f1() And f2() Then MsgBox "X" 
End Sub 

Public Function f1() As Boolean 
    f1 = False 
End Function 

Public Function f2() As Boolean 
    MsgBox "in f2" 
    f2 = False 
End Function 

enter image description here

+0

ありがとうございました!非常に役立ちます! :) – Peter

2

はい、VBAは常にAndステートメントでの条件をテストします()。これは、エラー値や他の何かをテストできない1つの理由です。

例えば:(ETC例えば、#N/A、#1 DIV/0!)細胞におけるワークシートエラー値に遭遇したとき、それがので

If Not IsError(range("a1").value) And range("a1").value > 0 Then 

上記は常に(型の不一致)が失敗しますエラー値がゼロより大きいかどうかを調べようとします。

If Not IsError(range("a1").value) Then 
    If range("a1").value > 0 Then 

の文と第二に達したことがない場合、エラーが最初にすることによって検出されるので、セル内のエラー値に遭遇した時には、上記失敗することはありません。あなたのケースでは

ABCXYZ両方がTXT文字列内になければならないか、ステートメントが失敗します。

+0

FWIW、同じことがVBA **あるいは**文で真です。 – Jeeped

+0

ありがとうございます!非常に役立ちます! :)はいORは、どのようなステートメントでも当てはまると思います。 – Peter

関連する問題