IsNumericの動作を理解する
さて表題、IsNumeric とは 評価対象が数値として扱えるかを判定する関数だけど変な勘違いをして扱うと、思わぬ動作を呼び込むはめになるので注意が必要な事は知っていますか
Public Sub test()
Dim ロング As Long, バリアント As Variant
Debug.Print ロング
Debug.Print IsNumeric(ロング)
Stop
Debug.Print バリアント
Debug.Print IsEmpty(バリアント)
Debug.Print IsNumeric(バリアント)
End Sub
上記のコードを実行すると分かりますが、
IsNumeric は数値として、扱えるか?が機能なわけです。
コーディングに慣れて、ワークシートのセルの値を配列変数で引き取り、
セルの値が完全に空白であった場合は、Empty が値として入る。
それで、慣れてきてやりがちなのが、IsNumeric(バリアント) = True
を忘れがち、Empty は数字として扱えること!
理屈は簡単だけど、つい忘れがち。
1 文字列として見れば Empty は文字列が無い=空白である
2 数字として見れば Empty は値が無い=0である
ゆえに IsNumeric(Empty)=True となる、コーディングに慣れてきて何かを省略しがちな時に起きやすい…。
もちろんデバッグですぐに気が付きますが、処理など端折る時は注意です!