マクロを使っていく中で、どうしても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
このコードを実行すると

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