VBA入門
InputBoxメソッド(インプットボックス)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2021-11-19

第100回.InputBoxメソッド(インプットボックス)


マクロ VBA サンプル画像

InputBoxメソッドはApplicationのメソッドで、ユーザー入力用のダイアログ ボックスを表示します。
表示したダイアログ ボックスに入力された情報を受け取ることが出来ます。
マクロVBAの途中でユーザーに何らかの値を入力してもらう事で、その後の処理にその値を使う場合に使用します。


これは、InputBox関数とは違います。
InputBox関数には無いTypeという引数を使うことで、より活用範囲が広がります。

InputBox関数では、文字列の入力だけしかできませんが、
InputBoxメソッドでは、
数値に限定したり、セル参照をすることが出来ます。


InputBoxメソッド

マクロVBAに情報を与えるためのダイアログ ボックスを表示します。

ダイアログ ボックスには、[OK] ボタンと [キャンセル] ボタンが表示されます。
[OK] をクリックすると、ダイアログ ボックスに入力した値が返されます。
[キャンセル] をクリックすると、InputBox は False を返します。

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

Prompt ダイアログ ボックスに表示するメッセージを指定します。
この引数には、文字列、数値、日付、またはブール値を指定できますが、自動的に値は文字列型に変換されます。
Title ダイアログ ボックスのタイトルを指定します。
この引数を省略すると、既定値の "入力" がタイトル バーに表示されます。
Default ダイアログ ボックス内のテキスト ボックスに表示する初期値を指定します。
この引数を省略すると、テキスト ボックスには何も表示されません。
この値には、Range オブジェクトを指定することもできます。
Left 画面の左上隅を基準として、ダイアログ ボックスの X 座標をポイント単位で指定します。
ポイント: 印刷する文字のサイズ (高さ) を指定する基本単位。1ポイントは1/72 インチ です。
Top 画面の左上隅を基準として、ダイアログ ボックスの Y 座標をポイント単位で指定します。
HelpFile 対象ダイアログ ボックスで使うヘルプ ファイルの名前を指定します。
引数 HelpFile および引数 HelpContextID が共に指定されていれば、ダイアログ ボックス内に [ヘルプ] ボタンが表示されます。
HelpContextID 引数 HelpFile で指定したヘルプ ファイル内のヘルプ トピックのコンテキスト ID 番号を指定します。
Type

返されるデータの型を指定します。
この引数を省略すると、ダイアログ ボックスは文字列 (テキスト) を返します。
次の値のいずれか 1 つまたは合計値を指定できます。
たとえば、文字列または数値が入力できるダイアログ ボックスを作成するときは、引数 Type の値を 1 + 2 に設定します。


Type
Typeに指定する値

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

以上の値のいずれか 1 つまたは合計値を指定できます。

戻り値
ダイアログボックスには、[OK] ボタンと [キャンセル] ボタンが表示されます。
[OK] ボタンを選択すると、InputBox はダイアログ ボックスに入力された値を返し、
[キャンセル] ボタンを選択するとFalse を返します。

Typeを指定しない場合は、戻り値以外はInputBox関数とほぼ同じ使い方になります。
第24回.インプットボックス(InputBox関数)
・InputBox関数の構文 ・名前付き引数 ・InputBox関数の例文
したがって、Typeを指定しないのならInputBox関数を使用すれば良いでしょう。

以下では、Typeを指定した場合の使用例を示します。


InputBoxメソッドの使用例

数値のみ入力

Dim myNum As Variant
myNum = Application.InputBox(prompt:="数値入力", Type:=1)
'キャンセルされた場合はFalseが戻る
If myNum Then
  MsgBox myNum
Else
  MsgBox "キャンセルされました。"
End If

マクロ VBA InputBoxメソッド

数値のみ入力可能となります。
キャンセルされた場合はFalseが戻るので、受け取る変数はFalseを受け入れられるデータ型にしておきます。
数値型にしておくと0になってしまいますので、0入力と判別できなくなります。
0入力と区別する必要がある場合は数値型以外(VariantやString)で受け取る必要があります。

セル参照の入力

Dim myRange As Range
On Error Resume Next
Set myRange = Application.InputBox(prompt:="マウスでセル範囲を選択してください。", _
                  Title:="対象範囲選択", _
                  Type:=8)
'キャンセルされた場合はSetがエラーとなる
If Err.Number = 0 Then
  MsgBox myRange.Address
Else
  MsgBox "キャンセルされました。"
End If

マクロ VBA InputBoxメソッド

セル参照の入力になります。
戻り値は、Rangeオブジェクトになるので、Setステートメントを使用します。
キャンセルされた場合はFalseが戻るので、Setステートメントはエラーとなります。
これに対処するために、On Errorを使っています。

受け取る変数をVariant型にして、Setステートメントを使わずにVBAを記述した場合、

Dim myRange As Range
myRange = Application.InputBox(・・・

この場合は、myRangeにはValue値が配列として格納されます。


最後に

VBAにおいてユーザー入力を必要とするシーンでは、ほとんどの場合はInputBox関数で用が足ります。
例えば、数値に限定したい場合でも、InputBox関数の戻り値を数値かどうかを判定すれば良いだけです。

最もInputBoxメソッドを必要とするシーンとしては、セル参照の入力になるでしょう。
VBAの中で、ユーザーにセル範囲を選択してもらう場合こそ、まさにInputBoxメソッドの最大の活用シーンになると思います。




同じテーマ「マクロVBA入門」の記事

第106回.Functionプロシージャー

プログラム(マクロVBA)内で特定の処理を実行し値を返すプロシージャーです。これはつまり、Functionプロシージャーで独自の関数をつくれるということです。Subプロシージャーとの違いは、値を返すか返さないかの違いです。
第107回.プロシージャーの引数
・引数の構文 ・引数の使用例 ・引数について
第108回.変数の適用範囲(スコープ,Private,Public)
・プロシージャーレベル変数 ・・・ プロシージャー内でのみ使用可能 ・モジュールレベル変数 ・・・ モジュール内でのみ使用可能 ・パブリック変数 ・・・ 全てのモジュールの全てのプロシージャーで使用可能 ・変数の適用範囲について簡単にまとめてると ・定数(Const)の適用範囲について ・変数の重複について ・変数は、極力狭いスコープで使う事が望ましいとされます。
第100回.InputBoxメソッド(インプットボックス)
第101回.Midステートメント
・Midステートメント ・MidBステートメント ・Midステートメントの使用例 ・Midステートメントの必要性 ・実践での使用例
第102回.Intersectメソッド
・Intersectメソッド ・Intersectの使用例 ・Intersectメソッドの最後に
第103回.UnionメソッドとAreasプロパティ
・Unionメソッド ・Areasプロパティ ・Unionメソッドで連結した結果のRangeオブジェクトの状態について ・Unionメソッドの使用例 ・Unionメソッドの実践例
第104回.GetPhoneticメソッドとSetPhoneticメソッド(フリガナ)
・GetPhoneticメソッド ・GetPhoneticメソッドの使用例 ・SetPhoneticメソッド ・SetPhoneticメソッドの使用例
第109回.列挙型(列挙体)Enum
・Enumステートメント ・列挙型(Enumステートメント)の使用例 ・列挙型(Enumステートメント)の活用について
第110回.ユーザー定義型・構造体(Type)
・Typeステートメントの構文 ・ユーザー定義型の使い方 ・ユーザー定義型の使用例 ・ユーザー定義型の制限 ・最後に
第111回.静的配列
・配列とは ・静的配列と動的配列 ・配列の宣言 ・多次元配列 ・要素の下限の変更 ・配列について


新着記事NEW ・・・新着記事一覧を見る

エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.ひらがな⇔カタカナの変換|エクセル基本操作
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.並べ替え(Sort)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ