導入
業務で作成したマクロ、ボタンを押し間違えてデータをすべて消してしまった…という経験はありませんか?マクロは実行すると一瞬で処理が完了するため、取り消し(Undo)が効かないことがほとんどです。今回解説する「確認ダイアログ」は、重要な処理を実行する前にユーザーの意思を確認し、重大なミスを未然に防ぐための必須テクニックです。
基礎知識
VBAで確認画面を出すには、MsgBox関数を使用します。単にメッセージを表示するだけでなく、ボタンの種類を指定することで、ユーザーのクリックしたボタンを「戻り値」として取得できます。
今回の肝となるのはIf構文です。MsgBoxの戻り値が「OK」なのか「キャンセル」なのかを判定し、処理を分岐させることで、「OKが押されたときだけ実行する」という制御が可能になります。
実装/解決策
手順は非常にシンプルです。既存のマクロの「実行したい処理」の直前にIf文を挿入し、最後にEnd Ifで閉じるだけです。
1. VBAエディタで対象のマクロを開く。
2. 処理の先頭に「If MsgBox(“確認メッセージ”, vbOKCancel, “タイトル”) = vbOK Then」と記述。
3. 処理の最後に「End If」を記述。
これにより、ユーザーが[キャンセル]を選択した場合は、If内の処理がスキップされ、何も起こらない安全な設計になります。
サンプルプログラム
以下のコードは、セル範囲をクリアする処理に確認ダイアログを組み込んだ例です。
Sub ClearData()
‘ 1. 確認メッセージを表示して、ユーザーの選択結果を取得する
‘ vbOKCancel を指定することで [OK] と [キャンセル] ボタンを表示
‘ タイトルに “確認” を設定
If MsgBox(“データをクリアしてもよろしいですか?”, vbOKCancel + vbQuestion, “確認”) = vbOK Then
‘ 2. OKが押された場合のみ実行される処理
Range(“B2:D10”).ClearContents
MsgBox “データをクリアしました。”, vbInformation, “完了”
Else
‘ 3. キャンセルが押された場合の処理(必要であればメッセージを出す)
MsgBox “キャンセルされました。”, vbExclamation, “中止”
End If
End Sub
応用・注意点
現場での開発で意識してほしい点が2つあります。
1. 適切なアイコンの使用
MsgBoxの引数に「vbQuestion」を加えると疑問符アイコン、「vbExclamation」を加えると警告アイコンが表示されます。視覚的に「何が起きるか」をユーザーに伝えることで、より親切なツールになります。
2. 処理の「戻り」を考える
今回の例のように、[キャンセル]が押されたときに「キャンセルされました」とメッセージを出すべきか、あるいは何も言わずにそっと終了するべきかは、業務フローに合わせて判断してください。頻繁に使うボタンなら、メッセージを出さない方がストレスが少ない場合もあります。
まずはご自身のマクロにこの「ワンクッション」を加えてみてください。これだけでツールの信頼性がぐっと向上します。
