【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分岐を活用することでより安全で使いやすいシステムを構築できます。

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次