- ベストアンサー
VBAの入力ボックスのデータ型について
- VBAのInputBox関数を使用してデータを入力する際、String型とVariant型以外のデータ型を指定すると実行時エラーが発生します。
- String型とVariant型はエラーにならない理由は、InputBox関数が文字列や任意のデータ型の値を受け入れることができるためです。
- 一方、他のデータ型を指定すると、InputBox関数はそのデータ型に合わせた値を返す必要がありますが、受け取った値を指定されたデータ型に変換できない場合はエラーになります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>「キャンセル」を押した場合もエラーにならないのでしょうか? 端的に言うなら、「キャンセル」を押した場合にエラーになるというのが 貴方の思い込みだからです。 ヘルプの InputBox 関数のページには、解説としてキャンセルを押した ときの動作が説明されています。その通りに動いているだけです。 関数は説明書に書かれている通りの動きしかしないのです。 読まないと分からない事です。
その他の回答 (3)
- uruz
- ベストアンサー率49% (417/840)
>「String型のデータを返す場合はエラーにならない」という事はわかりましたが どうして 「どうして」と言われても... 先の回答に書いたように「InputBox関数はString型のデータを返す関数だからです。」としか... 「String型のデータを返す場合」とありますが、InputBox関数がString型以外の値を戻すことはありません。必ずString型です。 入力BOXに数値として123を入れてもInputBox関数が返す値はString型の"123"という文字列を返します。 これを数値としたい場合はキャスト関数( Cint() Clng() Csng() Val()など)で変換する必要があります。 >「キャンセル」を押した場合もエラーにならないのでしょうか? 「キャンセル」を押した場合もString型の文字列を返します。 返される値は空白の文字列( "" )です
お礼
何度もお答えいただいてすいません。 たしかに「なんで」「どうして」と聞かれても困りますよね。 「InputBox関数はString型のデータを返す関数だからです」 で覚えます。。 ありがとうございました。
- MARU4812
- ベストアンサー率43% (196/452)
このプログラムは入力した値によって動作が変わりますよ? VB は何とか自力での変換を試みます。 それでも変換できなかったときに実行時エラーを出します。 > String型・Variant型以外は、 > 「実行時エラー '13'; 型が一致しません。」になります。 日付や数値に変換可能な値を入力すれば、エラーにならないのでは? > InputBox String型・Variant型がエラーにならない理由がわかりません。 文字を1文字も入力しなかった場合の事を言っていますか??? 長さ0の文字列は、文字列として有効です。(※プログラム上では "" で表す。) Variant型も同じですね。
お礼
>このプログラムは入力した値によって動作が変わりますよ? そうでしたね。 私はInputboxで「キャンセル」をしたときの動作で実験してました。 説明不足ですいません。 ありがとうございました。
- uruz
- ベストアンサー率49% (417/840)
InputBox関数はString型のデータを返す関数だからせす。 Variant型の変数は特殊な変数型で全ての型の値を収納できます。 ○ String型=String型 ○ Variant型=String型 × Long型=String型 ○ Long型=Clng(String型) ただし、数値に変換可能なStringデータあること
お礼
ご回答ありがとうございます。 「String型のデータを返す場合はエラーにならない」という事はわかりましたが どうして Sub String型() Dim a As String a = InputBox("値をいれてください") End Sub を実行して、「キャンセル」を押した場合もエラーにならないのでしょうか? 度々質問してすいません。 また >Long型=Clng(String型) >ただし、数値に変換可能なStringデータあること と言うのは、 インプットボックスに入れる値が大文字の「2」の場合 数値に変換できるから大丈夫という事ですね!
お礼
>「キャンセル」を押した場合にエラーになるというのが 貴方の思い込みだからです。 私の思い込みでしたね。 失礼しました。 ヘルプをよく読んでみます。 ありがとうございました。