即効テクニック

ウィンドウ操作関連のテクニック

InputBoxで空欄を認識する

(Excel 97/2000/2002/2003/2007)
マクロ実行中にユーザーからデータを受け取るときは、InputBoxが便利です。

Sub Sample1()
    Dim buf As String
    buf = InputBox("名前を入力してください")
    MsgBox buf
End Sub
ただし、上記のSample1では、ユーザーが[キャンセル]ボタンをクリックした場合を想定していません。 [キャンセル]ボタンがクリックされるとInputBoxは空欄を返すので次のように判定できます。
Sub Sample2()
    Dim buf As String
    buf = InputBox("名前を入力してください")
    If buf = "" Then
        MsgBox "キャンセルされました"
    Else
        MsgBox buf & "が入力されました"
    End If
End Sub
一般的には「キャンセルされたかどうか」を「返り値が空欄かどうか」で判定できれば十分ですが、ケースによっては「キャンセルされた」動作と「空欄のまま[OK]ボタンがクリックされた」動作を区別したい場合もあります。 そんなときは、上記Sample1やSample2で使った「InputBox関数」ではなく、Applicationオブジェクトの「InputBoxメソッド」を使います。
Sub Sample3()
    Dim buf As String
    buf = Application.InputBox("名前を入力してください")
    Select Case buf
    Case "False"
        MsgBox "キャンセルされました"
    Case ""
        MsgBox "空欄が入力されました"
    Case Else
        MsgBox buf & "が入力されました"
    End Select
End Sub
ApplicationオブジェクトのInputBoxメソッドは、[キャンセル]ボタンがクリックされるとFalseを返します。 もちろん、上記のSample3では、ユーザーが「False」という文字列を入力して[OK]ボタンを押した場合も「キャンセルされた」と認識します。 多くの場合はそれでも十分ですが、もっと厳密に判定したいときは、返り値の型を次のように判定すればいいでしょう。 返り値を受け取る変数bufを、バリアント型で宣言している点に留意してください。
Sub Sample4()
    Dim buf As Variant
    buf = Application.InputBox("名前を入力してください")
    If VarType(buf) = vbBoolean Then
        MsgBox "キャンセルされました"
    Else
        MsgBox buf & "が入力されました"
    End If
End Sub