重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

こんばんは

ExcelVBAでのInputBoxメソッドの使い方についてご質問があります

以下のプロシージャ
Dim myCode as Variant

myCode=Application.Inputbox("顧客コードを入力してください","顧客検索")

if myCode<>False then
worksheets("sheet").Activate
Range("a1").AutFilter ,filed:=1,Criteria1:=myCode
end if

というプロシージャのについて、InputBoxメソッドの引数Typeは入力されるデータが文字列型の場合のみ省略できるとテキストに書いてあったのですが、今回のプロシージャの場合文字列型のデータだけでなくFalseのブール型や他のデータ型のデータが入力される可能性があると思います。

変数myCodeがStringで宣言されているのならまだ引数Typeを省略できるのは分かるのですが、
Variant型で宣言されている変数に、文字列型の場合のみ引数Typeを省略できるという意味が良く分かりません。

教えていただけてたありがいです

A 回答 (1件)

こんにちは。



>Variant型で宣言されている変数に、文字列型の場合のみ引数Typeを省略できるという意味が良く分かりません。

その説明の文章ですと、確かに、わかりにくいですね。一旦、その説明はなしにして進めたほうがよいと思います。

「今回のプロシージャの場合文字列型のデータだけでなくFalseのブール型や他のデータ型のデータが入力される可能性があると思います。」
ここの部分は、Text を指定してもString型で返ってくるわけではないのです。

Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, [Type])

Type は、デフォルト状態で、Text 値(実は、Variant 型で出力します)

Type のバラメータの種類(ヘルプより)
値  意味
0  数式
1  数値
2  文字列 (テキスト)  ※Default
4  論理値 (True または False)
8  セル参照 (Range オブジェクト)
16  #N/A などのエラー値
64  数値配列

Text 値にしておけば、出力は、数値型、文字列型、論理型、エラー値 になります。(数値配列は、構造的どうやって出すのか分かりません。)

そこで、戻り値のmyCode の受け取りにVariant 型にしておけば、データ型が違いますというエラーを返さずに済むわけですが、myCode のデータ型をString 型にしても、上記は受け取れるわけです。

String 型なら、
Dim myCode As String

If myCode<>"False" then

で可能です。

Variant 型なら、

Dim myCode As String

If myCode<> False then
で良いのですが、

-----------
Dim myCode As Variant
myCode = Application.InputBox("顧客コードを入力してください", "顧客検索")
If VarType(myCode) <> vbBoolean Then
'実行
End If
-------------
ということが可能だということです。
言い換えると、

パラメータを省略すると、
myCode = Application.InputBox("顧客コードを入力してください", "顧客検索")
InputBox メソッドは、Type はデフォルト状態で、Variant 型の出力をするということです。

たぶん、これだけの説明では、まだ、足りない部分があるかもしれません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

すみません、回答していただいたのにいまいち理解できませんでした

まだまだ私は勉強が足りないようですので、もっと勉強してからもう一度WindFallarさんの回答を読んでみます。

長文の回答ありがとうございました!

お礼日時:2017/08/13 18:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!