【Excel VBAマクロを実行するための初期設定】(6回目)

Excel VBAマクロを実行するための初期設定 6回目についてです。

1. 概要


これまで実施したものは、「Application.ScreenUpdating」と「Application.Calculation」と「Application.EnableEvents」の設定を行うマクロの実行でした。

今回は残りの1つのコードを記載していきたいとおもいます。

前回と同様に検証をしながら実施していけたらいいなと思っています。


今回も高速化を行うというよりは、ポップアップが出ないようにするコードなので、時間が半分になるというより、マクロを実行しても止まらないようにするという感じになります。

1-1. (1)「Application.DisplayAlerts」の説明と事前準備

「 Application.DisplayAlerts」の説明を行いたいと思います。

「Application.DisplayAlerts」は、警告を制御するためのマクロになります。

まずは「Application.DisplayAlerts」を実行していないときの画面を止めない動きを試していきたいと思います。

読んでいる方にも、実行していただけるようにコードも合わせて記載させていただきます。


①前回作成したコピーファイルは削除して問題ありませんので、ここで削除します。


②「新規 Microsoft Excel ワークシート.xlsm」を開いてください。


④前回実施したマクロボタンを作成します。

(ファイルを開いたときにマクロが無効にされました。

「コンテンツの有効化」ボタンが出力されていたら、「コンテンツの有効化」をクリックしてください)


テストを実施するだけなので、ボタンはそのままにしています。

右クリックし、「マクロの登録」-「編集」をクリックします。


⑤前回記載した

Workbooks.Open Filename:="フルパス¥新規 Microsoft Excel ワークシート - コピー.xlsm"

をクリアします。


⑥「’Application.EnableEvents = Flase」と「’Application.EnableEvents = True」は、コメントにしてください。
 

⑦コメントした「'Application.EnableEvents = False」の下に以下のコードを入れてください。

 Worksheets.Add
 ActiveSheet.Delete


⑧書き終わりましたら、「ボタン1」をクリックします。


⑩「このシートは完全に削除されます。続けますか」というポップアップが出力されます。


⑪「削除」をクリックします。

このポップアップが出力されることの確認になります。


⑨いつものように実行時間が出力されますので、「OK」ボタンをクリックしてください。


[補足]「Worksheets.Add」はワークシートを新規に作成するコードです。

「ActiveSheet.Delete」は、作成したシートを削除するコードになります。


マクロを実行していないときでも「このシートは完全に削除されます。続けますか」と出力されます。

それと同じで、マクロでも削除するコードを書くと同じポップアップが出力されます。

マクロの実行中に「このシートは完全に削除されます。続けますか。」と毎回出力されてしまうと、マクロがここで止まってしまいます。


このポップアップがでないように対処していきたいとおもいます。

1-2. (2)「Application.DisplayAlerts」の作成

次に「Application.DisplayAlerts」を書いていきます。


①「’Application.EnableEvents = False」のコメントのすぐ下に「Application.EnableEvents = False」のコードを書きます。

次に「Application.Calculation = xlCalculationAutomatic」のすぐ下に「Application.EnableEvents = True」のコードを書きます。


「Application.EnableEvents = False」は、警告のポップアップ停止です。

「Application.EnableEvents = True」は、警告のポップアップ開始です。


全部書くと以下のようになります。


Option Explicit

Sub ボタン1_Click()

Dim st As Double, et As Double
st = Timer

'Application.ScreenUpdating = False
'Application.Calculation = xlCalculationManual
'Application.EnableEvents = False
Application.DisplayAlerts = False

Worksheets.Add
ActiveSheet.Delete

et = Timer - st
MsgBox et

'Application.ScreenUpdating = True
'Application.Calculation = xlCalculationAutomatic
'Application.EnableEvents = True
Application.DisplayAlerts = True

End Sub


②書き終わったら、「ボタン1」をクリックします。


③先ほど同様に実行時間が出力されますので、「OK」ボタンをクリックしてください。


④一瞬でしたので分からないかと思いますが、シートを追加し削除を行いました。

もう少し分かりやすくするために、「ActiveSheet.Delete」のインジケーターを左クリックで停止させます。


⑤このままマクロを実行をしてみます。


⑥「ActiveSheet.Delete」前でマクロが止まります。

ワークシートが新しく作成されていることが確認できます。


⑦再度「実行」を押します。


⑧先ほど同様に実行時間が出力されますので、「OK」ボタンをクリックしてください。


⑨シートが削除されていることが確認できるとおもいます。


⑩確認できましたら、「ActiveSheet.Delete」のインジケーターを左クリックで解除します。


以上で、設定方法は完了に

1-3. (3)まとめ

これで高速化の4つの初期設定はすべて完了になります。

この4つコードをこれから先もずっと使えるようにまとめていきます。


①いままでコメントした3つコードのコメントブロックを非コメントブロックします。

4つ選択し「非コメントブロック」をクリックします。


②以下のコードを上下に書いていきます。

’高速化-----------------------------------


③画面は以下のようになります。


このようにするとこのコードが大事だと分かりますので、毎回マクロのコードを書くときは書くといいとおもいます。


④コメントで何をしているのか説明を書いて置くとよりみやすいとおもいます。

私は以下のように記載しました。


「Application.ScreenUpdating」は、画面を制御

「Application.ScreenUpdating」は、計算方法変更

「Application.EnableEvents」は、イベント画面を制御

「Application.DisplayAlerts」は、警告を制御


画面にすると以下のようになります。


2. 最後に

検証をしてみて、シート削除のポップアップが出力されないことが確認できました。

前回より、警告イベント制御の方が理解がしやすかったです。

警告はこれ以外にもあるので、他の警告に対しても有効になります。


但し、今回のコードを入れても警告が出る場合があります、その場合は他のコードを書かないと対処が出来ないので、注意が必要になります。

すべての警告を回避するわけではないです。


コードもきれいになり、分かりやすくなりました。

これからはマクロを作成するときは、このコードを書いていきたいと思います。