wanna.jp VBAリファレンス
Top > VBA関数リファレンス > VBA InputBox徹底活用!ユーザーフレンドリーな検索ワード入力とキャンセル対応の極意

VBA InputBox徹底活用!ユーザーフレンドリーな検索ワード入力とキャンセル対応の極意

Excel VBAでデータ検索ツールを開発する際、「検索条件をどこに入力させるか」で悩んだことはありませんか? セルに直接入力させるのは誤操作のリスクがありますし、見た目もスマートではありません。 そこで活躍するのが、ユーザーとの対話を可能にするVBAのInputBox関数です。 本記事では、このInputBoxを使って、ユーザーから検索ワードを効果的に受け取る方法を解説します。 特に、実務で避けたい「キャンセル時の曖昧な挙動」を克服し、堅牢な検索ツールを構築するテクニックを身につけましょう。

基本から学ぶ!InputBoxを使った検索ワード入力の実務コード

まずは、基本的なInputBox関数の使い方から見ていきましょう。 以下のコードは、ユーザーに検索ワードを入力させ、その結果をメッセージボックスで表示するシンプルな例です。 「東京」をデフォルト値として設定しているため、入力の手間を省くこともできます。

Sub GetSearchWordBasic()
    Dim searchWord As String
    
    ' InputBox関数でユーザーに検索ワードの入力を促す
    ' 第1引数: プロンプト(表示メッセージ)
    ' 第2引数: タイトルバーに表示されるタイトル
    ' 第3引数: 初期値(デフォルトで入力されている値)
    searchWord = InputBox("検索したいワードを入力してください。", "検索ワード入力", "東京")
    
    ' 入力されたワードの有無で条件分岐
    If searchWord <> "" Then
        ' 検索ワードが入力された場合("東京"、"大阪" など、空文字以外)
        MsgBox "入力された検索ワード: " & searchWord, vbInformation, "検索実行"
        ' ★ここに searchWord を使った実際の検索処理を記述します
    Else
        ' 何も入力されなかった場合 (OKボタン押下時、またはキャンセルボタン押下時)
        MsgBox "検索ワードが入力されませんでした。", vbExclamation, "処理中止"
    End If
End Sub

このコードを実行すると、入力ダイアログが表示され、ユーザーは検索ワードを入力できます。 入力後に「OK」ボタンを押せば、そのワードがsearchWord変数に格納され、メッセージボックスで確認できます。 しかし、この基本的なInputBoxには、実務で知っておくべき「落とし穴」が存在します。

【重要】InputBoxの落とし穴:キャンセルと空欄入力の厳密な区別

この問題を解決するには、InputBox関数ではなく、Application.InputBoxメソッドを使用します。 Application.InputBoxは、Type引数を指定することで、返されるデータの型をより厳密に制御でき、 特に「キャンセル」された場合にFalseという特殊な値を返すため、空文字との明確な区別が可能になります。

Sub GetSearchWordRobust()
    Dim searchWord As Variant ' ★重要: キャンセル時にFalseを返すためVariant型で宣言する
    
    ' Application.InputBoxメソッドを使用してキャンセル対応を強化
    ' Type:=2 はテキスト入力を意味します (その他のType値: 1=数値, 4=論理値, 8=セル範囲 など)
    searchWord = Application.InputBox( _
        Prompt:="検索したいワードを入力してください。", _
        Title:="検索ワード入力", _
        Default:="東京", _
        Type:=2 _
    )
    
    ' キャンセルされたかどうかの判定 (Falseが返る)
    If searchWord = False Then
        MsgBox "ユーザーが検索をキャンセルしました。処理を中断します。", vbExclamation, "処理中断"
    ' 空文字が入力されたかどうかの判定 (ユーザーが意図的に何も入力せずOKを押した場合)
    ElseIf searchWord = "" Then
        MsgBox "検索ワードが空で入力されました。(全件表示などの処理を実行)", vbInformation, "空ワード検索"
        ' ★ここに全件表示や特定の空ワード検索処理を記述
    ' 有効なワードが入力された場合
    Else
        MsgBox "入力された検索ワード: " & searchWord, vbInformation, "検索実行"
        ' ★ここに searchWord を使った実際の検索処理を記述します
    End If
End Sub

上記のGetSearchWordRobustプロシージャを実行してみてください。 今度は「キャンセル」ボタンを押すと「処理中断」メッセージが、何も入力せずに「OK」を押すと「空ワード検索」メッセージが表示されるはずです。 これで、ユーザーの意図を正確に読み取り、それに応じた処理分岐を実装できるようになります。

まとめ

VBAのInputBox関数は、ユーザーからの入力値をスマートに受け取るための強力なツールです。 特に、実務レベルの検索ツールを開発する際には、単に値を入力させるだけでなく、ユーザーが「キャンセル」した場合の挙動を適切にハンドリングすることが不可欠です。

通常のInputBoxではなく、Application.InputBoxType:=2(テキスト入力)とともに使用することで、キャンセルと空欄入力の厳密な区別が可能となり、より堅牢でユーザーフレンドリーなVBAアプリケーションを構築できます。 このテクニックをあなたのVBA検索ツール開発にぜひ活かし、ユーザー体験を向上させてください。

VBAでの業務効率化、悩み解決します

「このマクロ、もっと速くならないかな?」「エラーが消えない…」
Access/VBA専門のwanna.jpにご相談ください。

無料相談はこちら