忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBA】DisplayAlertsで警告メッセージを消す!シート削除時のポップアップを非表示にする方法

VBAでシートの削除やファイルの上書き保存などを実行する際、「本当に削除しますか?」といった確認メッセージ(ポップアップ)が表示されて処理がストップしてしまうことがあります。Application.DisplayAlerts を使えば、こうした警告メッセージを一時的に消して、マクロを完全に自動実行させることができます。

1. 基本概念:Application.DisplayAlerts とは?

Excelが発生させる各種確認アラートの表示・非表示を制御するプロパティです。これを False に設定すると、警告ダイアログを出さずにExcelの既定値(規定の挙動:例えば削除なら「削除を実行する」)でそのまま処理が進みます。

[ 設定値 ]
False:警告メッセージを表示しない(規定の動作を自動選択)
True:警告メッセージを表示する(既定の状態)

2. 実践サンプル:確認なしでシートを削除する

最重要ルール:処理が終わったら必ず True に戻す!

シート削除の直前で `False` にし、削除が終わったら即座に `True` に戻すのが基本の書き方です。

Sub DeleteSheetWithoutAlert()
  ' 1. 警告メッセージの表示をオフにする
  Application.DisplayAlerts = False
  
  ' 2. シートを削除(ポップアップが出ずに削除される)
  Worksheets("TempSheet").Delete
  
  ' 3. 処理が終わったら必ずオンに戻す
  Application.DisplayAlerts = True
End Sub

3. 実行結果

通常であれば「データが存在する場合、永久に削除されます」という警告ウィンドウが出ますが、一切の割り込みなしで「TempSheet」が即座に削除されます。

4. 【超危険】よくある失敗例と「戻し忘れ」の罠&解決策

失敗パターン:エラーで途中で止まり、True に戻らない

`DisplayAlerts = False` のまま途中でエラーが発生して処理が中断すると、その後のExcel全体の操作でも警告が出なくなります。手動で大切なファイルを保存せずに閉じようとした際も確認が出ずに消えてしまうという二次災害につながります。
' 危険!途中でエラーが起きると True に戻らない
Application.DisplayAlerts = False
Worksheets("存在しないシート").Delete ' ←ここでエラー発生!
Application.DisplayAlerts = True ' ←ここまで到達しない!

【解決策】On Error と Exit Sub を使った鉄壁のエラー処理

万が一エラーが発生しても必ず True に戻る脱出ルート(ExitHandler)を用意するのがプロの設計です。
Sub SafeDeleteSheet()
  On Error GoTo ErrorHandler ' エラーが発生したらErrorHandlerへジャンプ
  
  Application.DisplayAlerts = False
  Worksheets("TempSheet").Delete

ExitHandler:
  ' 正常・異常に関わらず必ずここを通って True に戻す
  Application.DisplayAlerts = True
  Exit Sub

ErrorHandler:
  MsgBox "エラーが発生しました: " & Err.Description, vbCritical
  Resume ExitHandler ' 後処理へ移動
End Sub

5. シート削除以外に警告を抑止できる実務例

DisplayAlerts はシート削除以外にも、業務自動化でよく引っかかる様々なポップアップをスキップできます。

1. 同名ファイルへの上書き保存(「上書きしますか?」をスキップ)
ActiveWorkbook.SaveAs Filename:="C:\Test\Data.xlsx"

2. 変更内容を保存せずにブックを閉じる(「変更を保存しますか?」をスキップ)
ActiveWorkbook.Close SaveChanges:=False

3. 外部リンク(参照)の更新警告(「リンクを更新しますか?」を自動で規定処理)
Workbooks.Open Filename:="C:\Test\LinkData.xlsx"

4. CSV保存時の互換性警告(「一部の機能が失われる可能性があります」をスキップ)
ActiveWorkbook.SaveAs Filename:="C:\Test\Data.csv", FileFormat:=xlCSV

6. エンジニアの視点:局所的な制御と「いけいけ」なエラーハンドリング

1. 範囲は最小限に: プログラムの最初で `False` にして最後で `True` に戻すのではなく、警告が出る対象の処理の前後だけをピンポイントで囲むのがバグを減らすコツです。
2. 規定動作の把握: ポップアップを消したとき、Excelが「はい(OK)」を選ぶのか「いいえ(キャンセル)」を選ぶのか(例:シート削除なら「はい」、保存確認なら「いいえ」)を事前に把握しておくことが「理系」的な堅牢設計に繋がります。


7. まとめ

完全自動化ツールを作る上で `DisplayAlerts = False` は必須ですが、エラー時の「戻し忘れ」対策(`On Error GoTo`)とセットで使って初めてプロのコードになります。リスクを回避しつつ、無人でもノンストップで動く爆速VBAツールを作り上げましょう!




PR