Excel VBAでマクロを組む際、ユーザーからの入力を取得したい場面は多くあります。そんなときに便利なのが「InputBox関数」です。InputBoxを使えば、簡単にダイアログボックスを表示して、ユーザーの入力を取得できます。
この記事では、VBA初心者の方でもすぐに使えるよう、InputBoxの基本的な使い方から、実用的な応用例まで詳しく解説していきます。コードの書き方、よくあるエラー、数値入力やキャンセル処理への対応まで、網羅的にご紹介します。
InputBoxとは?基本の説明
InputBoxは、ユーザーに対して入力を促すためのダイアログボックスを表示する関数です。最も基本的な使い方は以下のようになります。
Sub SampleInput()
Dim userName As String
userName = InputBox("あなたの名前を入力してください")
MsgBox "こんにちは、" & userName & "さん!"
End Sub
このコードを実行すると、「あなたの名前を入力してください」というメッセージが表示された小さなウィンドウが出てきて、ユーザーが入力した文字列を取得できます。
InputBoxの構文と各引数の説明
InputBoxには複数の引数があり、以下のような構文になります。
InputBox(Prompt, [Title], [Default], [Xpos], [Ypos], [HelpFile], [Context])
各引数の意味は以下の通りです。
- Prompt:メッセージ(必須)
- Title:タイトルバーに表示する文字列(省略可)
- Default:あらかじめ入力欄に表示しておく初期値(省略可)
- Xpos, Ypos:ウィンドウの表示位置(省略可)
- HelpFile, Context:ヘルプ関連(通常は省略可)
たとえば以下のように書けば、より親切なダイアログになります。
Dim age As String
age = InputBox("年齢を入力してください", "年齢確認", "20")
文字列以外のデータをInputBoxで受け取るには?
InputBox関数は文字列として返されるため、数値や日付を取得したい場合は変換が必要です。
数値の入力と変換
Dim age As Integer
Dim inputStr As String
inputStr = InputBox("年齢を入力してください", "年齢確認")
If IsNumeric(inputStr) Then
age = CInt(inputStr)
MsgBox "あなたの年齢は " & age & " 歳です"
Else
MsgBox "正しい数値を入力してください"
End If
このように IsNumeric
で数値チェックを行ってから変換するのが安全です。
キャンセルボタンを押された場合の処理
ユーザーが「キャンセル」ボタンを押すと、InputBoxは空文字列(””)を返します。これを利用して、キャンセル時の処理を記述できます。
Dim userInput As String
userInput = InputBox("好きな食べ物を入力してください", "質問")
If userInput = "" Then
MsgBox "入力がキャンセルされました"
Else
MsgBox "あなたの好きな食べ物は " & userInput & " ですね!"
End If
このように分岐処理を入れることで、ユーザーの操作に応じた適切な対応ができます。
InputBoxを使った実用例①:ワークシートに入力値を反映
以下は、ユーザーが入力した値をアクティブセルに書き込む簡単なサンプルです。
Sub InputToCell()
Dim value As String
value = InputBox("セルに入力する値を教えてください")
If value <> "" Then
ActiveCell.Value = value
Else
MsgBox "入力がキャンセルされました"
End If
End Sub
ボタンにマクロを登録すれば、ユーザーインタラクションのあるフォームのような使い方も可能です。
InputBoxを使った実用例②:セル範囲を選択させる
文字入力だけでなく、Application.InputBox
を使えば、セルの範囲選択を促すこともできます。
Sub SelectRange()
Dim selectedRange As Range
On Error Resume Next
Set selectedRange = Application.InputBox("セル範囲を選択してください", Type:=8)
On Error GoTo 0
If Not selectedRange Is Nothing Then
MsgBox "選択された範囲は " & selectedRange.Address
Else
MsgBox "選択がキャンセルされました"
End If
End Sub
Type:=8
を指定することで、戻り値が Range
オブジェクトとして返ってきます。
よくあるエラーとその対処法
入力を前提にした処理でエラーになる
Dim number As Integer
number = InputBox("数字を入力してください")
このように直接代入すると、数値以外を入力されたときにエラーになります。前述の IsNumeric
を使うことで防止可能です。
キャンセル時に意図しない動作になる
空文字のチェックを怠ると、予期せぬ動作を招きます。キャンセル対応の条件分岐を忘れないようにしましょう。
InputBoxとUserFormの違いとは?
InputBoxは一時的な簡易入力向けに適しています。一方、UserFormは以下のようなシーンに向いています。
- 複数の項目を一度に入力させたい
- コンボボックスやチェックボックスなどを使いたい
- UIをカスタマイズしたい
使い分けのポイントとしては、「簡単に済ませるならInputBox」「しっかりUI設計したいならUserForm」と覚えておくとよいでしょう。
まとめ
InputBoxは、VBAでユーザーとのインタラクションを実現するのに非常に便利な機能です。シンプルな構文で使いやすく、実用的な場面も豊富です。数値チェックやキャンセル対応などを工夫すれば、安定したマクロを作ることができます。
もし複雑な入力を求める場面が出てきた場合は、UserFormの使用を検討してみると良いでしょう。まずはInputBoxからマスターして、ステップアップしていくのが王道です。