【VBA】InputBox関数でキャンセルされた時の判定方法

InputBox関数でキャンセルされた時の判定方法

今回はInputBox関数でキャンセルボタンを押された時の判定方法を紹介します。

返り値が「空文字列""」かどうかで判定することもできますが、未入力でOKボタンを押した時も空文字列となってしまいます。

空文字列に頼らず、キャンセルを判定する方法があるので覚えてみてください。

InputBox関数でキャンセルされた時の判定方法(StrPtr関数)

Sub InputBoxCancel()
    'InputBoxでキャンセルを判定する
    
    Dim strInput As String
    strInput = InputBox("キャンセルボタンを押してね")
    
    If StrPtr(strInput) = 0 Then
        MsgBox "キャンセルボタンが押されました"
    Else
        MsgBox "OKボタンが押されました"
    End If
    
End Sub

キャンセルされた時の判定はStrPtr関数という関数を使います。

上のサンプルコードを実行すると、キャンセルした時とOKした時で処理が分岐していることが分かります。

StrPtr関数とは

StrPtr関数は引数(今回はstrInput)のメモリアドレスを返す関数です。

メモリアドレスは、コンピュータの記憶領域の一つであるメモリ上で、データの位置を示した番地です。

https://gimo.jp/glossary/details/memory_address.html

変数の中身はコンピュータのどこかに保存されていて、その住所をメモリアドレスと呼びます。

そして、変数の中身がまだ保存されていない場合、StrPtr関数は0を返します。

    If StrPtr(strInput) = 0 Then

インプットボックスでキャンセルボタンが押された場合、変数の中身が保存されていないため、StrPtr(strInput)は0を返します。

反対にOKボタンが押された場合は、空文字であっても変数に保存されるため、0以外の数値が返されます。

この原理を利用すると、上のIf文のようにキャンセルされたことを判定することができます。

VBAが難しいと感じたら
プロにお任せして代わりに作ってもらってはいかがでしょう?
VBAの作成依頼はこちらから

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2022/12/08 14:44:42時点 Amazon調べ-詳細)

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい