なぜ「DisplayAlerts」が必要なのか
Excelマクロを組んでいると、シートの削除やブックの保存、上書きなどの操作を行う際に、Excelが親切心で「本当に実行しますか?」という確認メッセージを出すことがあります。
これが手動操作なら問題ありませんが、マクロで大量のデータを処理している最中にこのメッセージが表示されると、ユーザーが「OK」を押すまで処理が完全にストップしてしまいます。自動化の最大の敵である「中断」を回避するために、このプロパティを使いこなすことは実務の必須スキルです。
基礎知識:DisplayAlertsプロパティとは
DisplayAlertsは、Applicationオブジェクトに属するプロパティで、Excelの警告や確認メッセージを表示するかどうかを制御します。
設定値
・True(デフォルト): 警告や確認メッセージを表示します。
・False: 警告や確認メッセージを非表示にし、Excel側で自動的に「デフォルトの選択肢(多くはOK)」を選んだ状態にして処理を続行します。
実装のポイント
実務で使う際は、「警告を消したい処理の直前でFalseにし、処理が終わったら即座にTrueに戻す」というサンドイッチ構造にするのが鉄則です。これを忘れると、他の操作にまで影響が及び、誤操作の原因となるため注意が必要です。
サンプルプログラム
以下のコードは、シートを削除する際の確認メッセージを抑制する例です。
Sub DeleteSheetWithoutAlert()
‘ 警告メッセージを非表示にする
Application.DisplayAlerts = False
On Error Resume Next ‘ 万が一シートが存在しない場合のエラー回避
‘ テスト用のシートを作成して削除する
Worksheets.Add.Name = “一時的なシート”
Worksheets(“一時的なシート”).Delete
‘ 処理が終わったら必ずTrueに戻すこと!
Application.DisplayAlerts = True
MsgBox “メッセージを表示させずにシートを削除しました。”
End Sub
応用・注意点:現場で陥りやすいバグを防ぐ
1. 必ずTrueに戻すこと
処理途中でエラーが発生し、コードが強制終了すると「False」のまま放置されてしまうリスクがあります。より堅牢なプログラムにするには、エラーハンドラ(On Error GoTo 終了ラベル)を併用し、どのルートで終了しても確実にTrueに戻るように記述しましょう。
2. 「何が起きるか」を把握しておく
DisplayAlertsをFalseにすると、Excelは「ユーザーがOKを押した」と判断して処理を強行します。例えば「ファイルを上書きしますか?」という警告も無視して上書き保存されるため、取り返しのつかないデータ消失に繋がる可能性があります。本当に自動化しても安全な操作かどうかを常に確認してください。
3. ログを残す工夫
警告を非表示にすると、処理が失敗したことにも気づきにくくなります。重要なファイルを操作する場合は、処理が正しく完了したかどうかの判定(If文など)を組み合わせて、安全性を確保するように心がけてください。
