【VBA】メッセージボックスをモジュールに集める|OKOnly,OKCancel,YesNo
作成日:2022-12-02
更新日:2025-10-07

OKCancelとYesNoはTrue/falseを返す
'=============================
' Module: MsgBoxHelper.bas
'=============================
Option Explicit
'--- OKのみ ---
' 情報メッセージ用(デフォルトタイトル: "お知らせ")
Public Sub MsgOKOnly( _
ByVal text As String, _
Optional ByVal title As String = "お知らせ")
MsgBox text, vbOKOnly + vbInformation, title
End Sub
'--- OK/Cancel ---
' OKでTrue, CancelでFalse(デフォルトタイトル: "確認")
Public Function MsgOKCancel( _
ByVal text As String, _
Optional ByVal title As String = "確認") As Boolean
MsgOKCancel = (MsgBox(text, vbOKCancel + vbQuestion, title) = vbOK)
End Function
'--- Yes/No ---
' YesでTrue, NoでFalse(デフォルトタイトル: "確認")
Public Function MsgYesNo( _
ByVal text As String, _
Optional ByVal title As String = "確認") As Boolean
MsgYesNo = (MsgBox(text, vbYesNo + vbQuestion, title) = vbYes)
End Function
'--- Error ---
' エラーメッセージ用(デフォルトタイトル: "やり直してください")
Public Sub MsgError( _
ByVal text As String, _
Optional ByVal title As String = "やり直してください")
MsgBox text, vbCritical, title
End SubCaller example
' decide how to proceed based on result
' 呼び出し側例:結果に応じて処理方針を決定
' 入力検証
If Not IsValidInput() Then
MsgError "入力が不正です。"
Exit Sub ' ← 終了は呼び出し側で
End If関数化のメリット
後で「全部英語にしたい」「警告音なしにしたい」となったときに
関数の中身を変えることえ全体が反映される
ポイント
- 統一UI方針を決める|Consistent Message UI
→ メッセージタイトルやアイコン(vbInformation / vbExclamation / vbQuestion)を統一。 - 返り値を明示的に変換|Explicit Return Conversion
→ 返り値型(Boolean)に合わせて比較式で整える。 - メッセージ共通化モジュールを作る
→ 例:MsgInfo,MsgError,MsgYesNo,MsgOKCancelなどを同一モジュールにまとめる。
MsgOKCancelでやってること
MsgBox()の戻り値は数値(VbMsgBoxResult列挙体)vbOK = 1vbCancel = 2
MsgOKCancel = (res = vbOK)
→vbOKのときだけTrue、それ以外はFalse。
ボタンとアイコンの組み合わせ例
vbOKCancel + vbCritical '警告
vbYesNo + vbQuestion '質問
vbOKOnly + vbExclamation '注意
vbAbortRetryIgnore + vbQuestionVocabulary
| Message Wrapper|メッセージラッパー関数 |
| Wrapper Function|ラッパ関数 |
| Thin Abstraction Layer|薄い抽象化レイヤー |
| VbMsgBoxResult|メッセージボックスの戻り値 |
| VbMsgBoxStyle|メッセージボックスの表示スタイル |
| Explicit Conversion|明示的変換 |
| Consistent UI|一貫したUI |
| Centralized UI Feedback|UIメッセージの集中管理 |
Keep message functions consistent, and your UI will feel professional.
2022-12-02
編集後記:
この記事の内容がベストではないかもしれません。
記事一覧
-

[VBA]extract the filenamefrom a full path 【VBA】フルパスからファイル名と拡張子を取得する|fso.GetFileName/GetBaseName/GetExtensionName -

[VBA]Resizerows and columns 【VBA】Resize changes the size of a cell range|範囲のリサイズ -

Let と Getで読み取り専用 【VBA】クラスのプロパティを読み取り専用にするLet と Getの書き方 -

[VBA]fsoSingleton pattern 【VBA】FSO(“Scripting.FileSystemObject”)|シングルトン化して使う -

[VBA]copyfile 【VBA】ブックを複製する|fso.CopyFile -

文字の位置を取得 【VBA】文字列から指定文字の位置を取得する|InStr/InStrRev