|
> とやってみたところ、「"65535以上"」となりました。
何度も申し上げますように、
InputBox関数が返す値のデータ型はString型です。
で、混乱の一端は
InputBox関数の戻り値を Variant型の変数で受け取っていることに
あるような気がします。
Variant型変数は 「InputBoxメソッド」の戻り値のように
時には文字列であったり、時にはFalse(Boolean型)であったり、
場合によっては配列であったりするときには
必要不可欠な変数型なのですが、今回の例のように
自動型キャストが行われて「エラーにならず」
不可解な処理をすることがあります。
(例1) ----------------------------------- 既報
Dim a As Variant
a = ""
MsgBox a >= 1 '【True】となります
(例2) -----------------------------------
Dim a As Variant
a = ""
MsgBox a >= "1" '【False】となります
そうかと思えば、自動型変換して 0 = 0 となりそうな
ものが、そうならないこともあります。
(例3) -----------------------------------
Dim a As Variant
a = ""
MsgBox a = Val(a) '【False】が返る
で、
私からのコメントはすでに申し上げたとおり、
InputBox関数は文字列を返すのだから、受け取る変数を
Dim a As String と文字列型で宣言して、
もし a が "" (vbNullString) だったら
「入力がありません」
何らかの文字列が返されたら、
数値化できるかどうか IsNumeric で判断して
数値化可能だったら
Select Case Val(a) '▼数値に変換する
Case >= 1 : MsgBox 「1以上」
Case 0 : MsgBox 「0 です」
Case Is < 0: MsgBox 「負値です」
End Select
と、分岐すればいいと思います。
Dim a As String と文字列型で宣言してあれば、
a が "" のとき、
a >= 1
を実行すれば、「型が一致しません」とはっきりエラーになるので、
「どうして "" は1以上なのか?」...と
悩まなくて済みますので (^^
|
|