VBA 「InputBox」でエスケープキーを判断する方法は?

*本サイトはアフィリエイト広告を利用しています。

このページでは、VBAで「InputBox」を表示後に「エスケープキー」が押された場合について解説しています。

InputBoxで「エスケープキー」を押した場合に、「処理を継続するとエラーが発生する」、「エスケープで処理を終了したい」など、使い分ける場合に役立ちます。

スポンサーリンク
スポンサーリンク

エスケープとキャンセルは同じ動き

InputBoxで「エスケープキー」を押した場合と「キャンセル」を押した場合は同じ動きをします。

スポンサーリンク

エスケープ(キャンセル)を判断する方法はふたつある

VBAのInputBoxでエスケープ(キャンセル)を判断する方法は以下の2種類です。

  • 戻り値が「長さゼロの文字列」であるか判断する
  • StrPtr関数を利用する

戻り値が「長さゼロの文字列」であるか判断する

InputBoxで「ESC」キーや「キャンセル」をクリックした場合、戻り値が「長さゼロの文字列」となります。

判断するには「IF 戻り値 = “” Then ・・・」というIF文で問題ありません。

但し、InputBoxに何も値を入力しないで「OK」をクリックした場合も、「長さゼロの文字列」が戻されることは注意してください。

StrPtr関数を利用する

「入力なしOK」と「キャンセル」で処理を分けたい場合はStrPtr関数を使う必要があります。

StrPtrは戻り値のアドレスを取得するです、キャンセルの場合は「0」が返されるのでそれを利用します。

どちらを使うべきか

「長さゼロの文字列」でのエラーを避けたい場合は 「IF 戻り値 = “” ・・・」 を使用、「OK」と「キャンセル」で処理を変える場合はStrPtr関数を使用します。

どちらを使うかは、以降の処理で判断してください。

長さゼロの文字列で判断する方法について

InputBoxで「エスケープ(キャンセル)」した場合、長さゼロの文字列(=””)を返します。

エスケープ(キャンセル)は「 IF 戻り値 = “” 」で判断してください。

サンプルで「長さゼロの文字列」が戻るか確認してみよう

以下はサンプルプログラムです。

InputBox表示で「エスケープ(キャンセル)」した場合、”長さゼロの文字列”とメッセージが表示されます。

Sub Sample1()
    
    Dim wInput As String
    
    wInput = InputBox("入力してください")

    If wInput = "" Then
        MsgBox "長さゼロの文字列"
    End If
    
End Sub

①実行するとメッセージが出るのでエスケープを押すかキャンセルします。

②以下のメッセージが表示されます。

以下で解説していますが、何も入力しないで「OK」を押した場合も、「長さゼロの文字列」を返します。OKとキャンセルで処理を分けたい時は注意が必要です。

「入力なしOK」でも長さゼロの文字列を返すので注意する

気を付けたいのは、何も入力せずに「OK」を押した場合も長さゼロの文字列を返すことです。

「入力なしOK」と「キャンセル」の処理を分けたい時は、「IF 変数名 =””」では判断できません。

上述サンプルと同じプログラムでテストします。

Sub Sample1()
    
    Dim wInput As String
    
    wInput = InputBox("入力してください")

    If wInput = "" Then
        MsgBox "長さゼロの文字列"
    End If
    
End Sub

①上述のサンプルプログラムを実行、InputBoxに何も入力しないで「OK」します。

②「長さゼロの文字列」とメッセージが表示されます。

StrPtr関数で「OK」と「キャンセル」を識別する方法について

「OK」と「キャンセル」を識別するには「StrPtr関数」を利用します。

StrPtr関数について

StrPtr関数は引数に指定された文字列のアドレスを返します。

StrPtr(文字列変数)

InputBoxの戻り値で「OK」「キャンセル」を確認するには

InputBoxの戻り値を格納した変数を、StrPtr関数の引数にした場合、以下になります。

  • OKの場合 ‥ 戻り値0以外
  • キャンセルの場合‥戻り値0

サンプルプログラムで確認してみよう

以下のサンプルプログラムでテストします。

Sub Sample2()

    Dim wInput As String
    
    wInput = InputBox("入力してください")

    MsgBox StrPtr(wInput)
    
End Sub

①InputBoxで何も入力しないで「OK」クリック

②以下のように、何かの文字(アドレス)が表示されます。

③もう一度サンプルプログラムを動かして、今度は「ESCキー」または「キャンセル」クリックします。

④以下のように「0」が表示されます。

まとめ

VBAのInputBoxでエスケープ(キャンセル)を判断するには、戻り値が「長さゼロの文字列」であるか判断する方法と「StrPrt関数」を利用する方法があります。

戻り値が「長さゼロの文字列」でのエラーを避ける場合と、「OK」と「キャンセル」で処理を分けたい場合で使い分けて良いと思います。

どちらを使うかは、以降の処理の流れで判断してください。

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