【VBA】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文のようにキャンセルされたことを判定することができます。