2017-11-22 1 views
2

大きなプログラムで同様の問題を理解するために作成したサンプルプログラムです。私はa As Variantb As Doubleを持っています。 aNullに等しくなり、bはゼロに等しくなります。次に、aまたはbNullかどうかを確認します。数値がnullの場合、ExcelのVBAチェック:期待どおりに動作しない

Sub testNull() 
    Dim a As Variant 
    Dim b As Double 

    a = Null 
    b = 0 

    If a = Null Then 
     MsgBox (a & "null") 'doesn't print 
    ElseIf a <> Null Then 
     MsgBox (a & " not null") 'doesn't print 
    Else 
     MsgBox (b & " don't know") 'prints 
    End If 

    If b = Null Then 
     MsgBox (b & "null") 'doesn't print 
    ElseIf b <> Null Then 
     MsgBox (b & " not null") 'doesn't print 
    Else 
     MsgBox (b & " don't know") 'prints 
    End If 

End Sub 

結果はExcelが、同時に、Nullするaまたはbを考慮していませんが、それはNullになるないにそれらのいずれかを考慮していないことを示しています。

ここで確認する正しい方法は何ですか?問題の原因は何ですか? Null、ないTrueまたはFalseを返す(平等テストNull = Null含む)Nullに対して何かをテスト

+2

'IsNull'関数を使用しますか? – YowE3K

答えて

4

Nullをチェックするには、IsNull関数を使用します。

If IsNull(a) Then 
    MsgBox "a is null" 
Else 
    '... 
+2

VBAは未知のものと何も比較することはできません(未知のものと比較しても)。だから、不明(NULL)と何かを比較することは '='で単純には不可能です。したがって、そのための特別な機能があります。 '式A1''セルに入れ= 1/0 'と 'B1'をセルと、その後、' = A1 = B1'かどうかを確認するためにそれをコピー:たぶんまた、このテーマに関する注目に値します。もう一度、セルがエラーを生成し、エラーを '='と比較することができないため、 "期待される"結果は得られません。再度特別な関数 '= IsError()'が必要です。 – Ralph

+1

@Ralph VBAでは、 '='を使ってエラーをチェックすることもできます。 A1は、式を有する場合、例えば、 '=/0 '1は、その後、VBAは'範囲( "A1")。値= CVErr(xlErrDiv0) 'は' true'をを返します。 'IsError'関数は** **すべての**エラー型をチェックしますが、特定のコードと比較して特定のものをテストする必要があります。 – YowE3K

+1

ありがとうございます!私は関数IsNullを知っていましたが、シンプルな '='や '<>'は機能しません。多くの痛みを引き起こしました。 – Ans

関連する問題