EXCEL VBA INPUT BOX(メゾット)の使い方「Application.InputBox」
●はじめに
EXCEL VBAで文字列や数値などを入力する際に、InputBox関数とInputBoxメゾットを使用します。InputBox関数は簡易的な入力用として使用しますが、InputBoxメゾットは、表示するダイアログボックスにメッセージ・タイトル・入力値の初期値・戻り値の型を指定する事が出来るので、詳細に設定する事が可能です。それでは、INPUTBOXメゾットの使用方法の説明を致します。
なお、INPUTBOX関数については、こちらも参照して下さい。
https://akira55.com/inputbox/
●書式の説明
Application.InputBox (Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)
使用例①: myAns = myAns = Application.InputBox(Prompt:=”氏名”, Title:=”個人情報”, Default:=”山田太郎”, Left:=100, Top:=200, Type:=2)
使用例②: myAns = Application.InputBox(“氏名”, “個人情報”, “山田太郎”, 100, 200, , , 2)
※使用例①と②共に同じ内容でダイアログボックスが表示されます。(上記ダイアログボックス)
| 引数名 | 必須/省略可能 | データ型 | 説明 |
|---|
| Prompt | 必須 | String | ダイアログボックスに表示する文字列を設定します。 |
| Title | 省略可能 | Variant | ダイアログボックスのタイトルを設定します。 |
| Default | 省略可能 | バリアント型 | テキストボックスに表示される初期値を指定します。 |
| Left | 省略可能 | バリアント型 | ダイアログボックスのX座標(横)をポイント単位で指定します。(画面上の左上基準) |
| Top | 省略可能 | バリアント型 | ダイアログボックスのY座標(縦)をポイント単位で指定します。(画面上の左上基準) |
| HelpFile | 省略可能 | バリアント型 | ※ヘルプトピックで使用します。 |
| HelpContextID | 省略可能 | バリアント型 | ※ヘルプトピックで使用します。 |
| Type | 省略可能 | バリアント型 | 入力値の返されるデータ型を設定する事が出来ます。 |
EXCEL VBA INPUT BOX(メゾット) 使用例
●プログラム説明 サンプル①
下記のサンプルプログラムは、InputBoxメゾットの一般的な使用例です。2種類のプログラムを記述していますが、同じ内容で表示されます。引数をカンマ区切りで設定するか、引数名で設定する違いです。InputBoxメゾットを使用する場合は、引数名を利用して設定した方が解り易いので、おすすめです!
Sub AppInputBox01()
Dim myAns As String
myAns = Application.InputBox("氏名", "個人情報", "山田太郎", 100, 200, , , 2)'InputBoxメゾット設定します。
Range("B3") = myAns '入力値をセル(B3)に代入します。
End Sub
Sub AppInputBox02()
Dim myAns As String
myAns = Application.InputBox(Prompt:="氏名", Title:="個人情報", Default:="山田太郎", Left:=100, Top:=200, Type:=2)'InputBoxメゾット設定します。
Range("B3") = myAns '入力値をセル(B3)に代入します。
End Sub
●実行前~実行後 ※実行後、ダイアログボックスが表示されます。
①「鈴木一郎」入力⇒OK セル(B3)に「鈴木一郎」を代入されます。
②入力せずに、「キャンセル」ボタンクリック セル(B3)に「False」が代入されます。
(画面クリックして拡大)
EXCEL VBA INPUT BOX(メゾット) 入力値の制御(戻り値 Type:=)
| InputBoxメソッド(Type戻り値):値 | 説明 |
|---|
| 0 | 数式 |
| 1 | 数値 |
| 2 | 文字列 |
| 4 | 論理値 (True/ False) |
| 8 | セル参照 |
| 16 | #N/A などのエラー値 |
| 64 | 値の配列 |
●プログラム説明 サンプル②
下記のサンプルプログラムは、InputBoxメゾットで利用できる入力値の制御方法の使用例です。この機能を利用する事でInputBoxメゾットで返されるデータの型を指定する事が出来ます。指定したデータの型に該当しない場合は、再入力するさせる制御を行う事が出来ます。
プログラムの内容は、暗証番号を入力させるプログラムです。暗証番号を2回入力させて、2回入力した内容が一致したか確認するプログラムです。
Sub AppInputBox03() '戻り値の制御
Dim myNumber01, myNumber02 As Long
myNumber01 = Application.InputBox(Prompt:="数値で入力", Title:="暗証番号 一回目", Default:=0, Left:=100, Top:=200, Type:=1) 'InputBoxメゾット設定します。(戻り値をType:=1 数値に設定
myNumber02 = Application.InputBox(Prompt:="数値で入力", Title:="暗証番号 二回目", Default:=0, Left:=100, Top:=200, Type:=1) 'InputBoxメゾット設定します。(戻り値をType:=1 数値に設定
If myNumber01 = myNumber02 Then '2回入力した暗証番号を確認
MsgBox "入力された暗証番号は一致しています。"
Else
MsgBox "入力された暗証番号は不一致です!!"
End If
End Sub
●実行前~実行後 ※実行後、ダイアログボックスが表示されます。
① 1回目の暗証番号の入力をします。
② 2回目の暗証番号の入力をします。
③ 入力された暗証番号を比較します。
(画面クリックして拡大)
EXCEL VBA INPUT BOX(メゾット) を使った問題集・テスト問題
●プログラム説明 (サンプル④)
下記のサンプルプログラムは、InputBoxメゾットを使った問題を出題し、それに答えるプログラムです。下表にA列に問題・B列に答えを記入します。実行すると、1問目(セルA2)から順番に問題が出題されます。問題に対して回答しますが、正解するまで、同じ問題を繰り返します。正解すると次の問題が出題されるプログラムです。
Sub AppInputBox04() '問題
Dim Kaitou, Mondai As String
Dim I As Long
I = 2 '2行目から問題が始まる
Do
Do
Mondai = Cells(I, "A") 'A列の問題を代入
Kaitou = Application.InputBox(Mondai, "問題" & I - 1) 'INPUTBOXに問題の表示・問題番号のタイトルを表示
Loop Until Cells(I, "B") = Kaitou '回答(入力)が正解(B列)するまで繰り返す。
MsgBox I - 1 & "問目正解!"
I = I + 1 '次の問題に
Loop While Cells(I, "A") <> "" 'A列の問題が無くなるまで繰り返す。
MsgBox "全ての問題に解答できました。"
End Sub
●実行前~実行後 ※実行後、ダイアログボックスが表示されます。
① 1問目から順番に問題が出題されます。
② 問題を回答します。
③ 正解すると「正解」・・次の問題が出題されます。(最後の問題まで繰り返す)
④ 全問回答すると、「全ての問題に解答できました。」を表示して終了
(画面クリックして拡大)
EXCEL VBA INPUT BOX(メゾット) を使ったデータの登録「住所録の作成」
●プログラム説明 (サンプル⑤)
下記のサンプルプログラムは、InputBoxメゾットを使ってセルにデータを登録するプログラムです。データを登録する際は、フォームを使って登録する方法はありますが、フォームを作成してデータを登録するには、フォームを作成する必要があり、ある程度VBAスキルがないと難しいです。そこで、InputBoxメゾットを使い住所録を登録するサンプルプログラムを作成しました。
プログラムの説明ですが、簡易的な住所録を作成します。入力する内容は、氏名・住所・電話番号を登録して、3列目に戻り値を設定しており、これは、入力値に対して「2」文字列・「1」数値を指定し入力内容に対しての戻り値を指定に誤入力防止する事が出来ます。入力を終了する場合は、「*」を入力するとプログラムが終了します。
Sub AppInputBox05() '住所録登録
Dim Inp_Address, Inp_Koumoku As String
Dim Inp_Modori, I, L As Long
L = 5 '5行目から住所を登録する。
Do
For I = 2 To 4 '項目の氏名・住所・電話番号を繰り返す。
Inp_Koumoku = Cells(4, I) '4行名の項目名を代入
Inp_Modori = Cells(3, I) '3行名の戻り値を代入
Inp_Address = Application.InputBox(Inp_Koumoku & "の入力", "住所録の登録", Type:=Inp_Modori) 'INPUTBOXに問題の表示・問題番号のタイトルを表示
If Inp_Address = "*" Then
Exit For
Else
Cells(L, I) = Inp_Address
Cells(L, "A") = L - 4 'A列に登録番号を入力します。
End If
Next I
L = L + 1 '次の入力行(+1)に繰り返す。
Loop While Inp_Address <> "*" '「*」が入力されるまで繰り返す。
MsgBox "住所録の登録を終了しました"
End Sub
●実行前~実行後 ※実行後、ダイアログボックスが表示されます。
① 氏名を入力します。(戻り値:文字列) ”*”が入力されたら終了
② 住所を入力します。(戻り値:文字列)
③ 電話番号を入力します。(戻り値:数値)
④ 繰り返す①
最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。