入力画面「InputBox」の使い方 Excel(エクセル)マクロ(VBA)

InputBoxの使い方 エクセルマクロ(VBA)
記事内に広告が含まれています。

マクロを使っていく中で、どうしてもexcel上に無い値や任意の文字を使いたい場合には、マクロの実行途中で入力画面を簡単に出せる「InputBox」が便利です。

入力画面の例

今回はこの「InputBox」の使い方を簡単にご説明いたします。

Sub 入力画面()
    Dim 入力値 As String
    入力値 = InputBox("名前を教えてください")
    MsgBox ("こんにちは" & 入力値 & "さん")
End Sub
文字を入力してみた
入力した文字が反映された

InputBoxの使い方

InputBoxの構文は冒頭に記載したように、簡単な入力コマンドで良ければとても簡単に書くことが出来ますが、実は引数が下記のようにたくさんあります。

InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[Context])

せっかくですので、今回は一つ一つ見ていきましょう。

Prmpt メッセージ(省略不可)

InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[Context])

Prompt省略不可ですが、これ以外の引数は省略することが出来ますので、最悪これだけを記載しておけば使うことが出来ます。例えば下記のように記載してみます。

Sub 入力画面()
    InputBox ("名前を教えてください")
End Sub

このコマンドを実行すると以下のような入力画面が表示されます。

メッセージが表示された

しかしこれだけでは「OK」を押しても「キャンセル」を押しても何も起こりません。

そこでこんな風に変えてみます。

Sub 入力画面1()
    Dim 入力値 As String
    入力値 = InputBox("名前を教えてください")
    MsgBox ("こんにちは" & 入力値 & "さん")
End Sub

こうすることで入力した値をメッセージボックスとして表示する形で使うことが出来ます。

入力ダイアログに文字を入力した
入力した値が表示された

さらに、入力値が空欄だったり、キャンセルが押された時にも強制的にメッセージボックスが表示されてしまいますので、このような場合はキャンセルメッセージが表示されるようにしたいと思います。

Sub 入力画面()
    Dim 入力値 As String
    入力値 = InputBox(Prompt:="名前を教えてください")
    If 入力値 = "" Then
        MsgBox ("名前が取得できませんでした。" & vbCrLf & "もう一度名前を入力してください")
        End
    Else
        MsgBox ("こんにちは" & 入力値 & "さん")
    End If
End Sub

このコードを実行して、名前が空欄の状態で「OK」、または「キャンセル」ボタンを押すと、

キャンセルメッセージ

と表示させることが出来ました。

Title タイトル(省略可)

InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[Context])

Titleは省略可ですので、記載の必要はありません。しかしこれを入力しておくとタイトルを表示できるので格好良くすることが出来ます。

Sub 入力画面()
    Dim 入力値 As String
    入力値 = InputBox("名前を教えてください", "質問1")
    If 入力値 = "" Then
        MsgBox ("名前が取得できませんでした。" & vbCrLf & "もう一度名前を入力してください")
        End
    Else
        MsgBox ("こんにちは" & 入力値 & "さん")
    End If
End Sub
タイトルが表示された

Default 初期値(省略可)

Defaultは省略可ですので記載する必要はありません。しかしこれを入力しておくと入力ボックスに「初期値」を設定しておけるので、どんな値を入力して欲しいのか具体的に指示したい場合などに便利です。

Sub 入力画面()
    Dim 入力値 As String
    入力値 = InputBox("名前を教えてください", "質問1", "船長の名前")
    If 入力値 = "" Then
        MsgBox ("名前が取得できませんでした。" & vbCrLf & "もう一度名前を入力してください")
        End
    Else
        MsgBox ("こんにちは" & 入力値 & "さん")
    End If
End Sub
初期値が設定された

ここで、「タイトル」のすぐ後に「初期値」を持ってきたので、これが初期値と認識してくれましたが、タイトルが省略されていると「初期値」として認識してくれなくなります。

間の引数を省略している場合は、下記のように引数の名称を指定すれば「初期値」を指定することが出来ます。

Sub 入力画面()
    Dim 入力値 As String
    入力値 = InputBox(Prompt:="名前を教えてください", Default:="船長の名前")
    If 入力値 = "" Then
        MsgBox ("名前が取得できませんでした。" & vbCrLf & "もう一度名前を入力してください")
        End
    Else
        MsgBox ("こんにちは" & 入力値 & "さん")
    End If
End Sub

XPosとYPos (省略可)

二つ同時に紹介しますが、こちらは入力ダイアログの表示場所を指定する項目です。

「XPos」が横位置で「YPos」が縦位置です。

Sub 入力画面()
    Dim 入力値 As String
    入力値 = InputBox(Prompt:="名前を教えてください", XPos:=1000, YPos:=1000)
    If 入力値 = "" Then
        MsgBox ("名前が取得できませんでした。" & vbCrLf & "もう一度名前を入力してください")
        End
    Else
        MsgBox ("こんにちは" & 入力値 & "さん")
    End If
End Sub
表示位置を指定できた

どれくらいの場所が丁度良いかは実際に数字を変えながら試してみてください。

ちなみに画面から飛び出してしまうほど大きな数字を入れるとボタンが押せなくなるのではなく、エラーで止まってしまうので注意してください。

数字が大きすぎて画面からはみ出してしまう場合のエラー

HelpFileとContext (省略可)

この二つはセットで使いますので、こちらも二つ同時に紹介します。

HelpFileには別途作成しておいた「ヘルプファイル」、Contextにはヘルプファイルの行数を指定することが出来ます。

Sub 入力画面()
    Dim 入力値 As String
    入力値 = InputBox(Prompt:="名前を教えてください", HelpFile:="help.hlp", Context:=10)
    If 入力値 = "" Then
        MsgBox ("名前が取得できませんでした。" & vbCrLf & "もう一度名前を入力してください")
        End
    Else
        MsgBox ("こんにちは" & 入力値 & "さん")
    End If
End Sub

このコードを実行すると

ヘルプボタンを表示させることが出来ました。

コメント

タイトルとURLをコピーしました