MENU

【VBA】InputBoxの使い方と実践コード|応用テクニックも紹介

Excel VBAでユーザーからの入力を受け取る際に便利なのがInputBoxです。InputBoxは、シンプルなダイアログボックスを表示し、ユーザーが入力した値を取得する機能を提供します。この記事では、InputBoxの基本的な使い方から、応用例までを紹介します。

目次

基本構文

InputBoxの基本的な使い方

InputBoxは、ユーザーに情報を入力させ、その入力をVBAコードで利用するための関数です。最も簡単な形式は次の通りです。

Sub ShowInputBox()
    Dim userInput As String
    userInput = InputBox("何か入力してください")
End Sub

このコードを実行すると、ユーザーに対して「何か入力してください」というメッセージとともに、入力用のダイアログボックスが表示されます。ユーザーが入力した内容はuserInput変数に格納されます。

例: ユーザーの入力をセルに表示する

以下は、ユーザーが入力した内容をアクティブなセルに表示する簡単な例です。

Sub ShowInputInCell()
    Dim userInput As String
    userInput = InputBox("入力をしてください")
    
    If userInput <> "" Then
        ActiveCell.Value = userInput
    Else
        MsgBox "何も入力されませんでした。"
    End If
End Sub

このマクロを実行すると、InputBoxが表示され、ユーザーの入力がアクティブセルに書き込まれます。ユーザーが何も入力せずに「キャンセル」ボタンを押すか、空欄で「OK」を押した場合、エラーメッセージが表示されます。

InputBox関数の構文

InputBox関数には複数の引数を指定できます。基本的な構文は以下の通りです。

InputBox(Prompt [, Title] [, Default] [, XPos] [, YPos] [, HelpFile] [, Context])
  • Prompt: ダイアログボックスに表示されるメッセージ(必須)。
  • Title: ダイアログボックスのタイトルバーに表示される文字列(省略可)。
  • Default: デフォルトで表示される文字列(省略可)。
  • XPos, YPos: ダイアログボックスの表示位置(省略可)。
  • HelpFile, Context: ヘルプファイルの参照(省略可)。

例: カスタムタイトルを指定したInputBox

Sub CustomInputBox()
    Dim userInput As String
    userInput = InputBox("あなたの名前を入力してください", "名前の入力")
    
    If userInput <> "" Then
        MsgBox "こんにちは、" & userInput & "さん!"
    Else
        MsgBox "名前が入力されませんでした。"
    End If
End Sub

この例では、タイトルが「名前の入力」に変更されます。ユーザーが名前を入力すると、その名前がメッセージボックスで表示されます。

応用例

例1: 複数回InputBoxを使って複数の値を取得する

複数の値を入力させたい場合、必要な分だけInputBoxを連続して表示して入力内容を取得することができます。例えば、2つの数値を入力させて、その合計を計算する例を見てみましょう。

Sub AddTwoNumbers()
    Dim num1 As Double
    Dim num2 As Double
    Dim result As Double
    
    num1 = InputBox("1つ目の数値を入力してください")
    num2 = InputBox("2つ目の数値を入力してください")
    
    result = num1 + num2
    MsgBox "2つの数値の合計は " & result & " です。"
End Sub

このコードでは、ユーザーに2回InputBoxで数値を入力してもらい、その合計を表示します。

例2: 複数入力を区切り文字を含めて一括で取得する

InputBoxにカンマやスペースなどの区切り文字で入力させ、分割して処理する方法です。より汎用性のあるコードになります。

Sub MultipleInputExample()
    Dim userInput As String
    Dim inputs() As String
    Dim i As Integer

    ' ユーザーに入力を促す
    userInput = InputBox("カンマで区切って複数の値を入力してください。")

    ' 入力値を分割
    If userInput <> "" Then
        inputs = Split(userInput, ",")
        For i = LBound(inputs) To UBound(inputs)
            Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = inputs(i) 'A列の最終行+1行目に上から順に転記する
        Next i
    Else
        MsgBox "入力がキャンセルされました。"
    End If
End Sub

このコードでは半角のカンマを区切り文字として複数の入力値を取得しています。その後繰り返し処理として、A列の最終行+1行目に転記しています。

例3: ユーザー入力を条件分岐で処理する

InputBoxの入力に基づいて条件分岐を行うことも可能です。以下の例では、ユーザーが指定した値に応じて異なるメッセージを表示します。

Sub CheckUserInput()
    Dim userInput As String
    userInput = InputBox("色を入力してください(赤、青、緑)")
    
    Select Case LCase(userInput) ' 大文字小文字を無視して比較
        Case "赤"
            MsgBox "あなたが選んだのは赤です。"
        Case "青"
            MsgBox "あなたが選んだのは青です。"
        Case "緑"
            MsgBox "あなたが選んだのは緑です。"
        Case Else
            MsgBox "指定された色が無効です。"
    End Select
End Sub

このコードでは、ユーザーが入力した色に応じて異なるメッセージを表示します。LCaseを使って入力を小文字に変換しているため、大文字・小文字を区別せずに処理できます。

例4: 入力された数値が正しいかチェックする

ユーザーが入力した値が有効な数値かどうかを確認する方法も紹介します。たとえば、数値以外が入力された場合にはエラーメッセージを表示するようなチェックを行います。

Sub CheckNumericInput()
    Dim userInput As String
    Dim userValue As Double
    
    userInput = InputBox("数値を入力してください")
    
    If IsNumeric(userInput) Then
        userValue = CDbl(userInput)
        MsgBox "あなたが入力した数値は " & userValue & " です。"
    Else
        MsgBox "有効な数値を入力してください。"
    End If
End Sub

IsNumeric関数を使用して、ユーザーが入力した値が数値かどうかを確認し、数値なら変換して表示します。数値でない場合はエラーメッセージを表示します。

InputBoxの使用に関する注意点

  • キャンセルの扱い: ユーザーがInputBoxで「キャンセル」をクリックすると、空の文字列("")が返されます。入力がない場合やキャンセルされた場合の処理を忘れずに追加しましょう。
  • データ型の変換: InputBoxで取得する値は基本的に文字列として返されます。そのため、数値や日付など他のデータ型が必要な場合は、適切に変換する必要があります。
  • 入力エラーチェック: ユーザーからの入力をそのまま使用するのではなく、IsNumericや他のエラーチェックを行うことで、誤入力を防ぐことが重要です。

まとめ

InputBoxは、Excel VBAにおいてユーザーからの入力を簡単に取得するための便利なツールです。基本的な使い方は非常にシンプルですが、応用することで、ユーザーに対して柔軟な入力フォームを提供できます。

この記事で紹介したサンプルコードを基に、自分のVBAプロジェクトに合わせてInputBoxを活用してみてください。ユーザー入力に基づいた処理を自動化することで、作業の効率がさらに向上するでしょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

自動車メーカーで、VBAやRPAを用いた業務効率化・業務改善を行っております。

目次