VBA(マクロ)でユーザーからの入力を受け取りたい時に使えるのがInputBox(インプットボックス)です。
InputBox(インプットボックス)はマクロの使用者にテキストボックスを表示し、入力を受け付ける機能で、マクロを使用するユーザーからの選択や指示をマクロの動作に利用できます。
InputBox(インプットボックス)の使用例として簡単なものをあげると、パスワードの入力や、データベースから特定のデータを検索するキーワードの入力など、使用者(ユーザー)からの情報を受け取り、利用するマクロやプログラムが作れます。
使用者(ユーザー)から情報を受け取れるアプリやプログラムは、対話型プログラムとも呼ばれ、世の中の便利なアプリは対話型になっているものが多く、使用者(ユーザー)から何かしらの情報を受け取るような仕組みを持っています。
エクセルVBAも、他のプログラミング言語と同じく対話型アプリがつくれます。使用者(ユーザー)の主旨や意向を受け取って結果を返すマクロは、使用者(ユーザー)の満足度を高めるため、品質が良くなると言えます。
本記事では、対話型マクロをつくるために必要な、InputBox(インプットボックス)の使いかたと注意点などを解説していますので、プログラミングのスキルアップを目指す人の参考になれば幸いです。
独学の学習効率でお悩みの人必見!
<動画学習見放題サービス>
初心者にやさしいチューターなら今すぐにはじめられる
■オンラインで学習したい
■プログラミングで副業をはじめたい
■パソコン・エクセルの学習をしたい
【結論】インプットボックス(InputBox)は2種類
2つのインプットボックスと書き方は以下のとおり
1.ApplicationオブジェクトのInputBoxメソッド
Application.InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[HelpContextId],[Type])
2.InputBox関数
InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[HelpContextId])


Microsoft® Excel® 2019 MSO (バージョン 2301 ビルド 16.0.16026.20002) 32 ビットのものなので、ご利用環境の画面と異なる可能性があります。
InputBoxとはどういったものか
スマートフォンやWeb上のアプリなどにおいても、ユーザー名の登録や生年月日などの入力を求められた経験があると思いますので、なんとなくイメージできるのではないでしょうか。
InputBox(インプットボックス)は、VBAにおけるユーザーからの入力を受け取る手段(プログラム)と覚えておいてもらえば大丈夫です。

マクロを使う人からのメッセージを受け取れるものだと考えればわかりやすいね。
InputBoxでは予想外の入力がされることも少なくない
アプリをつくったり、プログラムを書く人にとっては、ユーザーから受け取った値を利用して、その後の処理を分岐させていくことは少なくないですが、そもそも入力を受け付ける上で想定しておかないとならない点があります。
それは、ユーザーからの入力で意図しない値が入力されると、マクロやプログラムのエラーが発生して停止してしまうことです。こちらの記事では、InputBoxの使いかたを紹介したいので、詳しい対処方法は他の記事で掲載しています。InputBoxの使いかたを知っているけど、エラーの対処方法をお探し人は、こちらの記事をご覧ください。
ApplicationオブジェクトのInputBoxメソッド
まずは、ApplicationオブジェクトのInputBoxメソッドを使ったコードの書き方についてですが、コードを書いて実行すると以下のような入力ウィンドウが表示されます。


この記事のサンプルプログラムでは、InputBox(インプットボックス)に入力された値を以下のように処理することで確認しています。
●変数に代入された値をデバッグプリントで表示(出力)すること
●変数のデータ型を判定しデバッグプリントで表示(出力)すること
それでは、入力コードから順番に見ていきます。
入力コード
Sub datatype_test() Dim no As Integer '①整数型の変数"no"にApplicationオブジェクトのInputBoxメソッドによる値の入力 no = Application.InputBox("数値を入力してください", "InputBoxメソッドで数値を入力する", "数値を入力", Type:=1) '変数noをデバッグプリントで表示(出力)する Debug.Print (no) '変数noに代入されたインプットボックスの値が数値であるか判定するコード2種類 Debug.Print WorksheetFunction.IsNumber(no) Debug.Print IsNumeric(no) '変数noに代入されたインプットボックスの値が文字列であるか判定するコード2種類 Debug.Print WorksheetFunction.IsText(no) Debug.Print TypeName(no) = "String" End Sub
実行結果
1
True
True
False
False
2行目と3行目は、InputBox(インプットボックス)で入力された値が整数型であるかの判定結果を表示していて「 True 」が返ってきています。
同様に4行目と5行目は入力された値が文字列型であるかの判定結果を表示しており、結果は「False」となります。
Applicationオブジェクト|InputBoxメソッドの構文
Application.InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[HelpContextId],[Type])
上記がアプリケーションオブジェクトのInputメソッドを使用したInputBoxのコードの書き方となります。
()内の引数がたくさんありますが、Prompt以外は任意入力なので省略が可能です。
今回使用したコードを見ていきたいと思います。
no = Application.InputBox("数値を入力してください", "InputBoxメソッドで数値を入力する", "数値を入力", Type:=1)
上記が今回使用したアプリケーションオブジェクトのInputメソッドを使用したInputBoxのコードです。
最初の” no= “でユーザーにより入力された値を変数の「 no 」に代入するコードとなります。
※type引数を指定すると入力された値のデータ型を指定することができます。
引数の指定については以下のとおりです。
引数 | 値 |
---|---|
Prompt | 数値を入力してください |
Title | InputBoxメソッドで数値を入力する |
Default | 数値を入力 |
Type | 1(数値を指定) |
InputBoxメソッドのタイプ(type)引数に数値(1)とした状態で文字列を入力
検証
InputbBoxメソッドの引数で数値のみ入力可を指定した状態で文字列「 あ 」を入力する


上記でエラー表示し、入力画面に戻りますが、これはVBAのバグ(実行時エラー)とは異なり、アプリやシステム上で誤った入力がされた際の通知としてユーザーに知らせる処理となります。
アプリやシステムを作る際に想定される正常以外のルートへの対処を準備しておくことも、未然にバグを防ぐことに繋がります。
InputBoxメソッドをあつかう上で覚えておきたいポイント
1.InputBoxメソッドの引数である「Prompt」は最大で約 255 文字使用可能
2.InputBoxメソッドでの戻り値のデータ型はType引数で指定可能
3.Type引数は複数の指定も可能
数値と文字列の両方入力可能とする場合 Type:= 1 + 2 と書く
InputBox関数
InputBox関数を実行した場合に表示される入力ダイアログ


この記事のサンプルプログラムでは、InputBox(インプットボックス)に入力された値を以下のように処理することで確認しています。
●変数に代入された値をデバッグプリントで表示(出力)すること
●変数のデータ型を判定しデバッグプリントで表示(出力)すること
InputBox関数についても入力コードから見ていきます。
入力コード
Sub datatype_test()
Dim no As Integer
'②整数型の変数"no"にInputBox関数による値の入力
no = InputBox("数値を入力してください", "InputBox関数で数値を入力する", "数値を入力")
'変数noをデバッグプリントで表示(出力)する
Debug.Print (no)
'変数noに代入されたインプットボックスの値が数値であるか判定するコード2種類
Debug.Print WorksheetFunction.IsNumber(no)
Debug.Print IsNumeric(no)
'変数noに代入されたインプットボックスの値が文字列であるか判定するコード2種類
Debug.Print WorksheetFunction.IsText(no)
Debug.Print TypeName(no) = "String"
End Sub
実行結果
1
True
True
False
False
ApplicationオブジェクトのInputBoxメソッドの結果同様に、1行目から変数の値である「 1 」、入力された値が数値であるため2・3行目が「 True 」が返ってきます。4・5行目は文字列であるかの判定のため「 False 」となります。
InputBox関数の構文
構文
InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[HelpContextId])
上記がInputBox関数を使用したInputBoxのコードの書き方となります。
()内の引数がたくさんありますが、InputBoxメソッドと同様にPrompt以外は任意入力なので省略が可能です。
また、InputBoxメソッドとの違いは引数にTypeの指定がないことです。
使用したコードを見ていきます。
no = InputBox("数値を入力してください", "InputBox関数で数値を入力する", "数値を入力")
InputBox関数で今回使ったコードはこちらです。構文上、引数のPromptは必須ですが、ユーザビリティとして使用される場面が多いTitleとDefaultについても指定しています。
InputBox関数では、InputBoxメソッドと違ってType引数は指定できません。
InputBox関数で表示されたウィンドウで入力された値は必ず文字列(String)型となります。
※数値を入力した場合でも文字列で返ってきます。
引数の指定については以下のとおりです。
引数 | 値 |
---|---|
Prompt | 数値を入力してください |
Title | InputBox関数で数値を入力する |
Default | 数値を入力 |
InputBox関数で文字列を入力
検証


エラーが発生しました。
これはサンプルコードで宣言した変数「 no 」が整数型であったのに対して、InputBox関数の戻り値が文字列(String)型であるため変数の型と値の型が異なることが原因で発生したものになります。
戻り値を代入する変数をつかう場合、文字列(String)型か、万能(Variant)型を宣言すればエラーは発生しません。
InputBox関数をあつかう上で覚えておきたいポイント
1.InputBox関数の引数である「Prompt」は最大で約 1024 文字使用可能
2.InputBox関数での戻り値は必ず文字列(String)型となる
3.入力ボックスは255文字まで入力可能で戻り値は254 文字に切り捨てられる
変数や値の型の種類については、こちらの記事で詳しく紹介しています。また、InputBox関数でダイアログを表示したけど、ユーザーからの入力を制限する方法については、以下の記事を参考に開発をすることをおすすめします。
InputBoxメソッドとInputBox関数における引数について
InputBoxの引数一覧とそれぞれを変更したときの効果について
InputBoxメソッドや、InputBox関数の引数は共通部分が多いのため、以下にまとめて紹介します。
引数 | メソッド/関数 | 必須/任意 | 効果 |
---|---|---|---|
Prompt | 両方 | 必須 | ダイアログ ボックスに表示するメッセージを指定 |
Title | 両方 | 任意 | ダイアログ ボックスのタイトルを指定 |
Default | 両方 | 任意 | 入力欄の初期値 |
XPos | 両方 | 任意 | ウィンドウのX座標(画面の左上隅を基準) |
YPos | 両方 | 任意 | ウィンドウのY座標(画面の左上隅を基準) |
HelpFile | 両方 | 任意 | ヘルプファイルを指定 |
HelpContextId | 両方 | 任意 | ContextまたはHelpContextIdにはヘルプファイル内のページを示すコンテキストIDを指定 |
Type | InputBoxメソッドのみ | 任意 | データの型を指定 |
0:数式 1:数値 2:文字列(テキスト) 4:論理値(True または False) 8:セル範囲(Rangeオブジェクト) 16:N/A などのエラー値 64:値の配列
各引数のイメージ図


引数の[prompt]は入力必須なので省略するとエラーになりますが、入力ダイアログを表示した際に直感的にわかりやすいという点も大切です。ユーザーの立場を想像すると任意入力の引数のうち[Title]や[Default]などはシーンに応じてにつかうことおすすめします。
VBAにおけるInputBoxの種類と使い方まとめ
VBAにおけるInputBoxは2種類ある
1.ApplicationオブジェクトのInputBoxメソッド
2.InputBox関数
2種類のInputBoxのコードの違い
1.Application.InputBox(Prompt)
2.InputBox(Prompt)
2種類のInputBoxの引数の違い
1.Type引数はApplicationオブジェクトのInputBoxメソッドのみ指定可能
2種類のInputBoxの戻り値の型の違い
1.ApplicationオブジェクトのInputBoxメソッドはType引数で指定可能
2.InputBox関数は文字列(String)型となる
今回はVBAにおいてユーザーからの入力を促すInputBoxについて紹介しました。
結論として、戻り値のデータ型を厳密に指定するのであれば、ApplicationオブジェクトのInputBoxメソッドを使った方がその後の変数代入との関係においても重大なエラーが発生しにくくなります。


お疲れ様でした。
最後までお読み頂きありがとうございました。
この記事が役に立ったと感じていただけた人は是非フォローお願いします。
![]() ![]() にほんブログ村 | ![]() ![]() |
コメント