
こんばんは
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を省略できるという意味が良く分かりません。
教えていただけてたありがいです
No.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 型の出力をするということです。
たぶん、これだけの説明では、まだ、足りない部分があるかもしれません。
回答ありがとうございます。
すみません、回答していただいたのにいまいち理解できませんでした
まだまだ私は勉強が足りないようですので、もっと勉強してからもう一度WindFallarさんの回答を読んでみます。
長文の回答ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのマクロでモジュールを...
-
callで順に実行されるプロシー...
-
Access VBAで行ラベルが定義さ...
-
VBA プロシージャの名前の取得
-
ACCESS マクロをモジュールに変...
-
DB2でのストアドプロシージャの...
-
OutlookVBAで作成したマクロに...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
Statement ignored というエラー
-
SQLserver算術オーバーフロ...
-
カーソル定義での条件分岐
-
Accessで年月日のデータ...
-
PL/SQLでのSQL文法
-
SQL*Loaderでのsysdate使用
-
キャッシュを使わずにSELECTを...
-
sqlplusのspoolで空白行出現
-
DATE型の省略値について
-
SQL ORDER BYにおける条件について
-
2016.3.2を日付として認識させたい
-
Accessの数値から時間に変換す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
callで順に実行されるプロシー...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
【Excel VBA】 WorksheetやRa...
-
OutlookVBAで作成したマクロに...
-
エクセルVBAでUserFormを起動し...
-
ACCESS2007インポート時の空白...
-
Excel VBAで「プログラム実行」...
-
VBA プロシージャの名前の取得
-
Accessでグローバル変数を宣言...
-
或るプロシージャの呼び出し元判定
-
PL/SQLのエラーについて
-
excel/vba/public変数
-
エクセルVBAが対応できるプログ...
-
VBAでの戻り値と引数について
-
sp_executesqlを実行してもテー...
-
ExcelVBAでワークブックの名前...
-
Access2016 VBA ボタンのイベン...
-
ACCESS マクロをモジュールに変...
おすすめ情報