このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

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

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

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

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

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

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

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

Posted by やろまい