|
▼VBA超超初心者さる さん:
> Dim a As Variant
> a = ""
> MsgBox a >= 1
なぜ a >= 1 が True なのか分かりませんが、
もともと↑のような異なるデータ型での比較演算はしません。
なぜ、
>> Case ""
>> Range("c1") = "なにも入力されてません"
>の判定を、一番最初にもって行ったら、どうでしょ
と提案したかというと、
もともとInputBox関数からの戻り値は ヘルプにあるように、
文字列型 (String) の値だからです。
あなたが InputBox関数で 1 とか入力しても、
戻り値は 1(数値) ではなく 文字列の "1" なのです。
ですから、
-------------------------
Dim a As String '変数a のデータ型を String型で宣言する
a = ""
MsgBox a >= 1
-------------------------
を実行すれば、a >= 1 のところで「型が一致しません」と叱られる
でしょう?
そういうわけで、
InputBoxの戻り値により条件分岐しようとするばあいには
(1)●まず、何らかの入力があったか? をチェックします。
(2)入力された文字列が「数値に変換可能か」を調べるのは
その次となります。
(3) IsNumeric(戻り値)が真のときだけ 戻り値を数値に変換して
数値が >=1 か =0 か マイナスか でCase文の分岐をする
ことになります。
なお、
InputBoxのダイアログで[キャンセル]ボタンを押して
入力がCancelされたことを判断するには
If StrPtr(a) = 0& Then Exit Sub
のように、InputBox実行直後に判断します。
(StrPtr という関数は文字列変数のメモリ上のアドレス
を返す関数で、StrPtr(a) の戻り値がゼロということは
アドレスがない、変数a がメモリのどこにも格納されて
いないことを意味します)
|
|