📊 Excel VBA Top100
🔧

InputFromUser

ユーティリティ

ユーザーから複数の値を入力してシートに書き込む

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

InputFromUser デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(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