Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 - InputBox

Excel VBA VBA
スポンサーリンク

InputBox は「ユーザーに一言入力してもらうための小さな窓」

InputBox は、ユーザーに文字や数字を入力してもらうためのダイアログです。
MsgBox が「VBA → 人間への一方通行のメッセージ」だとしたら、
InputBox は「人間 → VBA への“入力”を受け取る窓口」です。

イメージとしては、

「ちょっとここに値を入れてください」

とお願いする小さな入力フォームです。
入力された内容は、文字列として受け取ります(あとで数値に変換することもできます)。


InputBox の基本構文と一番シンプルな使い方

基本構文

よく使う形はこれです。

InputBox(プロンプト, [タイトル], [既定値])
VB

プロンプト:ユーザーに表示する説明文
タイトル:ウィンドウのタイトル(省略可)
既定値:最初から入力欄に入れておく初期値(省略可)

戻り値は「ユーザーが入力した文字列」です。

名前を入力してもらうシンプルな例

Sub SampleInputBoxBasic()

    Dim userName As String

    userName = InputBox("あなたの名前を入力してください。", "名前の入力")

    MsgBox "こんにちは、" & userName & " さん。"

End Sub
VB

流れを言葉で追うと、

InputBox が表示される
→ ユーザーが名前を入力して OK を押す
→ 入力された文字列が userName に入る
→ MsgBox で挨拶を表示する

という感じです。

ここで重要なのは、
InputBox は「入力された値を返す関数」なので、必ずどこかの変数で受け取る
ということです。


数値を入力してもらって計算に使う

文字列として受け取ってから数値に変換する

InputBox の戻り値は「文字列」です。
数値として計算に使いたいときは、CLngCDbl などで変換します。

Sub SampleInputBoxNumber()

    Dim s As String
    Dim n As Long

    s = InputBox("足し算する数値を入力してください。", "数値入力")

    If s = "" Then
        MsgBox "キャンセルまたは未入力です。"
        Exit Sub
    End If

    n = CLng(s)   ' 文字列を Long 型に変換

    MsgBox n & " に 10 を足すと " & (n + 10) & " です。"

End Sub
VB

ここでのポイントは、

InputBox → 文字列として受け取る
空文字(キャンセル・未入力)を先にチェックする
問題なければ数値型に変換して計算する

という流れです。

超初心者のうちは、
「InputBox の戻り値は文字列。数値にしたければ自分で変換する」
これだけ意識しておけばOKです。


既定値(初期値)を使って入力を楽にする

デフォルト値を入れておく

ユーザーに「だいたいこの値を使うけど、必要なら変えてね」という形にしたいとき、
既定値(第3引数)が便利です。

Sub SampleInputBoxDefault()

    Dim days As String

    days = InputBox("何日後の日付を計算しますか?", "日数入力", "7")

    If days = "" Then
        MsgBox "キャンセルされました。"
        Exit Sub
    End If

    MsgBox days & " 日後は " & Date + CLng(days) & " です。"

End Sub
VB

InputBox には最初から「7」が入った状態で表示されます。
ユーザーはそのまま OK を押してもいいし、別の数字に書き換えても構いません。

「よく使う値を初期値にしておく」と、ユーザーに優しいマクロになります。


キャンセルされたときの挙動をちゃんと押さえる

キャンセル時は「空文字」が返ってくる

InputBox でキャンセルボタンが押された場合、
戻り値は ""(長さ0の文字列)になります。

Sub SampleInputBoxCancel()

    Dim s As String

    s = InputBox("何か入力してください。", "テスト")

    If s = "" Then
        MsgBox "キャンセルされたか、何も入力されませんでした。"
    Else
        MsgBox "入力されたのは「" & s & "」です。"
    End If

End Sub
VB

「キャンセル」と「空欄のまま OK」を区別したい場合は、
もう少し工夫が必要ですが、
超初心者のうちは「どちらも空文字になる」と覚えておけば十分です。

大事なのは、
「空文字のまま数値変換しようとしてエラーになる」のを防ぐために、先に s = "" をチェックする
という習慣です。


InputBox を使うときに意識してほしい重要ポイント

「本当にユーザーに入力させるべきか?」を一度考える

InputBox は手軽ですが、
多用すると「毎回手入力させられて面倒なマクロ」になりがちです。

例えば、

毎回同じセルに入力してもらえばいい
設定シートにパラメータを書いておいてもらえばいい

というケースでは、InputBox ではなく「セルから読む」方がユーザーに優しいです。

逆に、

その場その場で値が変わる
一時的にだけ指定したい条件がある

といった場合には、InputBox がとても相性がいいです。

デバッグにも使えるが、MsgBox との役割を分ける

動きを確認したいだけなら、
「InputBox で止めて入力させる」よりも「MsgBox で中身を表示する」方がシンプルです。

InputBox は「ユーザーから情報をもらう」
MsgBox は「ユーザーに情報を見せる」

この役割分担を意識しておくと、コードが整理されます。


まとめ:InputBox は「その場でユーザーに一言聞くための、超手軽な入力フォーム」

InputBox の本質は、

「マクロの実行中に、ユーザーから1つ値を入力してもらう」

ことです。

押さえておきたいポイントをコンパクトにまとめると、

InputBox(プロンプト, タイトル, 既定値) で入力ダイアログを出せる
戻り値は文字列なので、数値にしたいときは CLng や CDbl で変換する
キャンセルや未入力のときは空文字が返るので、先に "" チェックをする
よく使う値は既定値に入れておくと、ユーザーが楽になる

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