🔧
InputFromUser
ユーティリティユーザーから複数の値を入力してシートに書き込む
VBAのInputBox関数やApplication.InputBoxを使ってユーザーから入力を対話的に受け取るマクロです。テキスト・数値・日付など様々なデータ型の入力をダイアログで受け付け、入力値を変数に格納してマクロの処理パラメータとして使用できます。キャンセル判定や入力値の妥当性チェックを組み込むことで、堅牢な対話型マクロを実装できます。内部ではApplication.InputBoxのTypeパラメータでテキスト・数値・セル範囲などの入力形式を制限でき、標準のInputBox関数より堅牢な入力検証が可能です。より複雑な入力項目が必要な場合はUserFormへ発展させる前段階として、まず本マクロで簡易的な対話処理を試作する使い方もよく行われます。マクロにハードコードされたパラメータを毎回書き換える手間もなくなります。

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行すると入力項目数と各値を入力するダイアログが表示される
🎯 活用シーン
- ✓集計対象の月を入力させて動的にレポートを生成する対話型マクロ
- ✓処理対象ファイルのパスをユーザーに入力させてバッチ処理を開始
- ✓しきい値や上限値を毎回入力できる柔軟な条件付き書式設定マクロ
- ✓月次処理の対象月をその都度ユーザーに入力させ、同じマクロを毎月使い回したいとき
- ✓簡易的な承認フローで、承認者に理由やコメントをその場で入力してもらいたいとき
💡 実装のヒント
- ▸Application.InputBox(Type:=1)で数値のみ受け付ける入力ボックスが作れます
- ▸戻り値がFalseまたは空文字の場合はキャンセルされたと判断できます
- ▸InputBoxより高度なUIにはUserFormを使います
- ▸ユーザーがキャンセルボタンを押した場合の戻り値(Falseまたは空文字)を必ず判定し、後続処理が誤動作しないようにしてください。
- ▸入力値の範囲チェック(最小値・最大値・日付の妥当性など)をInputBox取得直後に行うと、後工程でのエラーを未然に防げます。
💻 VBAコード
' InputFromUser
' -----------------
' Macro Name: InputFromUser
' Description: ユーザーから複数の値を入力してシートに書き込む
' Parameters: なし
' Returns: なし
' Usage: 実行すると入力項目数と各値を入力するダイアログが表示される
' -----------------
Sub InputFromUser()
Dim ws As Worksheet
Dim numInputs As Long
Dim i As Long
Dim promptText As String
Dim userInput As String
Dim inputValues() As String
Dim startRow As Long
Dim startCol As Long
On Error GoTo ErrorHandler
Set ws = ActiveSheet
promptText = InputBox("入力する項目数を入力してください (1-20):", "ユーザー入力", "3")
If promptText = "" Then
Exit Sub
End If
If Not IsNumeric(promptText) Then
MsgBox "数値を入力してください。", vbExclamation
Exit Sub
End If
numInputs = CLng(promptText)
If numInputs < 1 Or numInputs > 20 Then
MsgBox "1から20の範囲で入力してください。", vbExclamation
Exit Sub
End If
ReDim inputValues(1 To numInputs)
For i = 1 To numInputs
userInput = InputBox("値 " & i & " を入力:", "ユーザー入力")
If userInput = "" Then
MsgBox "キャンセルされました。", vbInformation
Exit Sub
End If
inputValues(i) = userInput
Next i
startRow = InputBox("書き込み開始行を入力:", "セルの選択", "1")
If startRow = "" Then startRow = "1"
If Not IsNumeric(startRow) Then startRow = "1"
startCol = InputBox("書き込み開始列を入力 (1=A, 2=B...):", "セルの選択", "1")
If startCol = "" Then startCol = "1"
If Not IsNumeric(startCol) Then startCol = "1"
For i = 1 To numInputs
ws.Cells(CLng(startRow) + i - 1, CLng(startCol)).Value = inputValues(i)
Next i
MsgBox numInputs & "件のデータを書き込みました。", vbInformation
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub