InputBox は「ユーザーに一言入力してもらうための小さな窓」
InputBox は、ユーザーに文字や数字を入力してもらうためのダイアログです。
MsgBox が「VBA → 人間への一方通行のメッセージ」だとしたら、
InputBox は「人間 → VBA への“入力”を受け取る窓口」です。
イメージとしては、
「ちょっとここに値を入れてください」
とお願いする小さな入力フォームです。
入力された内容は、文字列として受け取ります(あとで数値に変換することもできます)。
InputBox の基本構文と一番シンプルな使い方
基本構文
よく使う形はこれです。
InputBox(プロンプト, [タイトル], [既定値])
VBプロンプト:ユーザーに表示する説明文
タイトル:ウィンドウのタイトル(省略可)
既定値:最初から入力欄に入れておく初期値(省略可)
戻り値は「ユーザーが入力した文字列」です。
名前を入力してもらうシンプルな例
Sub SampleInputBoxBasic()
Dim userName As String
userName = InputBox("あなたの名前を入力してください。", "名前の入力")
MsgBox "こんにちは、" & userName & " さん。"
End Sub
VB流れを言葉で追うと、
InputBox が表示される
→ ユーザーが名前を入力して OK を押す
→ 入力された文字列が userName に入る
→ MsgBox で挨拶を表示する
という感じです。
ここで重要なのは、
InputBox は「入力された値を返す関数」なので、必ずどこかの変数で受け取る
ということです。
数値を入力してもらって計算に使う
文字列として受け取ってから数値に変換する
InputBox の戻り値は「文字列」です。
数値として計算に使いたいときは、CLng や CDbl などで変換します。
Sub SampleInputBoxNumber()
Dim s As String
Dim n As Long
s = InputBox("足し算する数値を入力してください。", "数値入力")
If s = "" Then
MsgBox "キャンセルまたは未入力です。"
Exit Sub
End If
n = CLng(s) ' 文字列を Long 型に変換
MsgBox n & " に 10 を足すと " & (n + 10) & " です。"
End Sub
VBここでのポイントは、
InputBox → 文字列として受け取る
空文字(キャンセル・未入力)を先にチェックする
問題なければ数値型に変換して計算する
という流れです。
超初心者のうちは、
「InputBox の戻り値は文字列。数値にしたければ自分で変換する」
これだけ意識しておけばOKです。
既定値(初期値)を使って入力を楽にする
デフォルト値を入れておく
ユーザーに「だいたいこの値を使うけど、必要なら変えてね」という形にしたいとき、
既定値(第3引数)が便利です。
Sub SampleInputBoxDefault()
Dim days As String
days = InputBox("何日後の日付を計算しますか?", "日数入力", "7")
If days = "" Then
MsgBox "キャンセルされました。"
Exit Sub
End If
MsgBox days & " 日後は " & Date + CLng(days) & " です。"
End Sub
VBInputBox には最初から「7」が入った状態で表示されます。
ユーザーはそのまま OK を押してもいいし、別の数字に書き換えても構いません。
「よく使う値を初期値にしておく」と、ユーザーに優しいマクロになります。
キャンセルされたときの挙動をちゃんと押さえる
キャンセル時は「空文字」が返ってくる
InputBox でキャンセルボタンが押された場合、
戻り値は ""(長さ0の文字列)になります。
Sub SampleInputBoxCancel()
Dim s As String
s = InputBox("何か入力してください。", "テスト")
If s = "" Then
MsgBox "キャンセルされたか、何も入力されませんでした。"
Else
MsgBox "入力されたのは「" & s & "」です。"
End If
End Sub
VB「キャンセル」と「空欄のまま OK」を区別したい場合は、
もう少し工夫が必要ですが、
超初心者のうちは「どちらも空文字になる」と覚えておけば十分です。
大事なのは、
「空文字のまま数値変換しようとしてエラーになる」のを防ぐために、先に s = "" をチェックする
という習慣です。
InputBox を使うときに意識してほしい重要ポイント
「本当にユーザーに入力させるべきか?」を一度考える
InputBox は手軽ですが、
多用すると「毎回手入力させられて面倒なマクロ」になりがちです。
例えば、
毎回同じセルに入力してもらえばいい
設定シートにパラメータを書いておいてもらえばいい
というケースでは、InputBox ではなく「セルから読む」方がユーザーに優しいです。
逆に、
その場その場で値が変わる
一時的にだけ指定したい条件がある
といった場合には、InputBox がとても相性がいいです。
デバッグにも使えるが、MsgBox との役割を分ける
動きを確認したいだけなら、
「InputBox で止めて入力させる」よりも「MsgBox で中身を表示する」方がシンプルです。
InputBox は「ユーザーから情報をもらう」
MsgBox は「ユーザーに情報を見せる」
この役割分担を意識しておくと、コードが整理されます。
まとめ:InputBox は「その場でユーザーに一言聞くための、超手軽な入力フォーム」
InputBox の本質は、
「マクロの実行中に、ユーザーから1つ値を入力してもらう」
ことです。
押さえておきたいポイントをコンパクトにまとめると、
InputBox(プロンプト, タイトル, 既定値) で入力ダイアログを出せる
戻り値は文字列なので、数値にしたいときは CLng や CDbl で変換する
キャンセルや未入力のときは空文字が返るので、先に "" チェックをする
よく使う値は既定値に入れておくと、ユーザーが楽になる
