【Access VBA】MsgBoxでYes/No分岐する方法

「削除処理や更新処理の前に、ユーザーへ確認メッセージを表示したい」
そう思ったことはありませんか?
Access VBAでは、MsgBoxのYes/Noを使って処理を安全に分岐できます。
この記事ではMsgBoxでYes/No分岐する方法を分かりやすく解説します。
- MsgBoxの基本構文と使い方
- Yes/Noボタンを表示する方法
- 戻り値を使った処理分岐の方法
- 変数で可読性を向上させる方法
MsgBoxの基本構文
まずはMsgBoxの基本構文について確認しておきましょう。
MsgBoxの書き方
MsgBoxの基本的な書き方は次の通りです。
MsgBox "メッセージ内容", buttons, "タイトル"buttonsには表示するボタンの種類やアイコンを指定します。
使用例
MsgBox "〇〇を入力してください。", vbExclamation, "警告"必須項目が未入力の場合に、警告メッセージを表示するコードです。
MsgBoxでYes/Noを表示する方法
MsgBoxでYes/Noボタンを表示するには、buttonsにvbYesNoを指定します。
MsgBox "削除しますか?", vbYesNo, "削除確認"vbYesNoを指定することでMsgBoxに「はい」「いいえ」のボタンが表示されます。
MsgBoxの戻り値で処理を分岐する方法
MsgBoxの戻り値で処理を分岐するには、If文を使って判定を行います。
基本構文
If MsgBox("削除しますか?", vbYesNo + vbQuestion, "削除確認") = vbYes Then
'「はい」を選択した場合の処理
Else
'「いいえ」を選択した場合の処理
End Ifポイント
ユーザーが「はい」を選択した場合はvbYes
「いいえ」を選択した場合はvbNoが返ります。
MsgBox() とカッコで囲む理由
If文の中ではMsgBoxを()で囲って呼び出しています。
これは、MsgBoxの戻り値(vbYes / vbNo)を取得するために関数として呼び出しているためです。
戻り値を使わない場合
MsgBox "処理が完了しました。"戻り値を使う場合
If MsgBox("削除しますか?", vbYesNo) = vbYes Then
MsgBox "削除しました。"
End If処理分岐の実装例(削除処理)
If MsgBox("本当に削除しますか?", vbYesNo + vbExclamation, "削除確認") = vbYes Then
DoCmd.RunSQL "DELETE FROM T_データ WHERE ID = " & Me.ID
MsgBox "削除しました。", vbInformation
End If削除や更新処理の前に確認を入れることで、誤操作によるデータ破壊を防止できます。
VbMsgBoxResult型に代入する方法
MsgBoxの結果は、VbMsgBoxResult型の変数に代入してから判定する方法もあります。
この方法はメッセージ内容が長い場合や、処理が複雑になる場合に特におすすめです。
基本構文
Dim result As VbMsgBoxResult
result = MsgBox("削除しますか?", vbYesNo + vbQuestion, "削除確認")
If result = vbYes Then
'「はい」を選択した場合の処理
Else
'「いいえ」を選択した場合の処理
End Ifこの書き方のメリット
MsgBoxの戻り値を変数に代入することでコードの可読性が向上します。
- メッセージが長くてもIf文が読みやすい
- 判定ロジックを後から変更しやすい
- デバッグ時に結果を確認しやすい
特に確認メッセージが複雑になる場合はこの書き方が便利です。
長文メッセージの実用例
Dim msg As String
Dim result As VbMsgBoxResult
msg = "以下のデータを削除します。" & vbCrLf & _
"・顧客情報" & vbCrLf & _
"・注文履歴" & vbCrLf & _
"・請求データ" & vbCrLf & vbCrLf & _
"本当に削除してもよろしいですか?"
result = MsgBox(msg, vbYesNo + vbExclamation, "削除確認")
If result = vbYes Then
DoCmd.RunSQL "DELETE FROM T_データ WHERE ID = " & Me.ID
MsgBox "削除しました。", vbInformation
Else
MsgBox "処理をキャンセルしました。", vbInformation
End Ifポイント
- 戻り値を変数に代入して判定できる
- メッセージが長くても読みやすい
- 条件分岐が増えても保守しやすい
- デバッグ時に戻り値を確認しやすい
MsgBoxでYes/No分岐する際の注意点
戻り値を使うときは()で囲む
MsgBoxの戻り値で分岐する場合必ず()で囲って関数として呼び出す必要があります。
NG例
If MsgBox "削除しますか?", vbYesNo = vbYes Then正しい例
If MsgBox("削除しますか?", vbYesNo) = vbYes Then理由
()を付けないと戻り値を正しく取得できず、構文エラーになるためです。
vbYesNoCancelでキャンセルを許可
Yes/Noだけでは「中断」や「保留」の選択肢がありません。
result = MsgBox("処理を続行しますか?", vbYesNoCancel + vbQuestion)戻り値
vbYes→ 実行vbNo→ 処理スキップvbCancel→ 処理中断
必要に応じてvbYesNoと使い分けましょう。
まとめ
今回はAccessのMsgBoxでYes/No分岐する方法について解説しました。
- 削除や更新前にユーザー確認ができる
- 戻り値で安全に処理を分岐できる
- VbMsgBoxResultに代入すれば可読性が高まる
このようにYes/No分岐を活用することでより安全で使いやすいシステムを構築できます。
コメント