こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

InputBox  String型・Variant

VBAです。

InputBox  String型・Variant型がエラーにならない理由がわかりません。

Sub 日付型()
Dim 日 As Date
日 = InputBox("値をいれてください")
End Sub
Sub 数値型()
Dim i As Long
i = InputBox("値をいれてください")
End Sub
Sub 通貨型()
Dim 円 As Currency
円 = InputBox("値をいれてください")
End Sub
Sub String型()
Dim a As String
a = InputBox("値をいれてください")
End Sub
Sub Variant型()
Dim v As Variant
v = InputBox("値をいれてください")
End Sub

String型・Variant型以外は、
「実行時エラー '13'; 型が一致しません。」になります。

String型・Variant型はならない理由を教えてください。ご回答よろしくお願いします。

投稿日時 - 2012-02-26 21:32:20

QNo.7329166

困ってます

質問者が選んだベストアンサー

>「キャンセル」を押した場合もエラーにならないのでしょうか?
端的に言うなら、「キャンセル」を押した場合にエラーになるというのが
貴方の思い込みだからです。

ヘルプの InputBox 関数のページには、解説としてキャンセルを押した
ときの動作が説明されています。その通りに動いているだけです。
関数は説明書に書かれている通りの動きしかしないのです。
読まないと分からない事です。

投稿日時 - 2012-02-27 22:06:31

お礼

>「キャンセル」を押した場合にエラーになるというのが
貴方の思い込みだからです。

私の思い込みでしたね。
失礼しました。
ヘルプをよく読んでみます。
ありがとうございました。

投稿日時 - 2012-03-09 19:51:01

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

>「String型のデータを返す場合はエラーにならない」という事はわかりましたが
どうして

「どうして」と言われても...
先の回答に書いたように「InputBox関数はString型のデータを返す関数だからです。」としか...
「String型のデータを返す場合」とありますが、InputBox関数がString型以外の値を戻すことはありません。必ずString型です。
入力BOXに数値として123を入れてもInputBox関数が返す値はString型の"123"という文字列を返します。
これを数値としたい場合はキャスト関数( Cint() Clng() Csng() Val()など)で変換する必要があります。

>「キャンセル」を押した場合もエラーにならないのでしょうか?

「キャンセル」を押した場合もString型の文字列を返します。
返される値は空白の文字列( "" )です

投稿日時 - 2012-02-27 20:18:42

お礼

何度もお答えいただいてすいません。

たしかに「なんで」「どうして」と聞かれても困りますよね。
「InputBox関数はString型のデータを返す関数だからです」
で覚えます。。

ありがとうございました。

投稿日時 - 2012-03-09 19:50:44

ANo.2

このプログラムは入力した値によって動作が変わりますよ?

VB は何とか自力での変換を試みます。
それでも変換できなかったときに実行時エラーを出します。

> String型・Variant型以外は、
> 「実行時エラー '13'; 型が一致しません。」になります。
日付や数値に変換可能な値を入力すれば、エラーにならないのでは?

> InputBox  String型・Variant型がエラーにならない理由がわかりません。
文字を1文字も入力しなかった場合の事を言っていますか???
長さ0の文字列は、文字列として有効です。(※プログラム上では "" で表す。)

Variant型も同じですね。

投稿日時 - 2012-02-27 10:21:48

お礼

>このプログラムは入力した値によって動作が変わりますよ?

そうでしたね。
私はInputboxで「キャンセル」をしたときの動作で実験してました。
説明不足ですいません。

ありがとうございました。

投稿日時 - 2012-03-09 19:50:22

ANo.1

InputBox関数はString型のデータを返す関数だからせす。
Variant型の変数は特殊な変数型で全ての型の値を収納できます。
○ String型=String型
○ Variant型=String型
× Long型=String型
○ Long型=Clng(String型)
ただし、数値に変換可能なStringデータあること

投稿日時 - 2012-02-26 22:30:54

お礼

ご回答ありがとうございます。
「String型のデータを返す場合はエラーにならない」という事はわかりましたが
どうして

Sub String型()
Dim a As String
a = InputBox("値をいれてください")
End Sub
を実行して、「キャンセル」を押した場合もエラーにならないのでしょうか?
度々質問してすいません。

また
>Long型=Clng(String型)
>ただし、数値に変換可能なStringデータあること

と言うのは、
インプットボックスに入れる値が大文字の「2」の場合
数値に変換できるから大丈夫という事ですね!

投稿日時 - 2012-02-27 19:46:39

あなたにオススメの質問