VBAでマクロを作成するとき、毎回書くお決まりのコードがあります。
僕は、下記の動作をさせるために、コピペして使い回しています。
・開始を確認するメッセージボックスを出す(「開始しますか?」)
・マクロの動きを早くする
・終了前にステータスバーに表示した文字を削除する
・処理が終わったことを知らせるメッセージボックスを出す(「完了しました」)
この記事では、このような処理をするためのコードを紹介します。
マクロ作成の基本は、下記をご参考に!
VBA共通コード
まず、上記で記載したことを実行するコード全体を記載しておきます。
「’処理」と書いてある部分に、実行したいコードを書き入れることになります。
Sub Example() |
Dim sm As Integer |
sm = MsgBox(“開始しますか?”, vbYesNo) |
If sm = vbNo Then |
End |
End If |
Application.ScreenUpdating = False |
Application.Calculation = xlCalculationManual |
‘処理 |
Application.StatusBar = “” |
Application.Calculation = xlCalculationAutomatic |
Application.ScreenUpdating = True |
MsgBox “完了しました” |
End Sub |
このまま、コピペして使っちゃえば楽だブゥ!
はい、そのまま使っちゃってください。
これ以降、コードを解説していきます。
コードの説明
コードを書いたことがない初心者にも分かるように解説していきます。
開始を確認するメッセージボックスを表示するコード
うっかり、意図しない時にマクロを実行させてしまうと、結構面倒です。
マクロで実行した処理は、「1つ戻る」などでは戻せないので、一度エクセルを閉じて開き直すなど必要になってしまいます。
下記のように、「開始しますか?」と開始を確認するメッセージボックスを表示させることで、この失敗を減らすことができます。
こちらのメッセージボックスを表示させるコードは下記になります。
Dim sm As Integer |
sm = MsgBox(“開始しますか?”, vbYesNo) |
「Dim sm As Integer」は変数(へんすう)の定義になります。
ここでは「sm」という変数を「Integer」という整数型で定義しています。
つまり、「sm」という箱を作って、その中にデータを入れられるようする、ということになります。
次の「sm=MsgBox(“開始しますか?”,vbYesNo)」で、メッセージボックスが表示されます。
「はい」を選択すると、「sm」という変数に「vbYes」が入り、
「いいえ」を選択すると、「sm」という変数に「vbNo」が入ります。
続く次のコードで、「いいえ」を選択した時の処理を実行させます。
If sm = vbNo Then |
End |
End If |
「if ~ then」の「~」に条件を入力し、「End If」までの処理を実行します。
ここでは、「sm = vbNo」を条件にしているので、「いいえ」を選んだ時に、
「If」と「End If」の間に入力された「End」が実行されることになります。
「End」は、すべての処理が終わることになるので、これで実行を止めることができます。
画面の更新を停止して処理を早くするコード
マクロで実行する都度、エクセル画面を更新していると、膨大な量の処理を行う時に時間がかかってしまいます。
そこで、マクロの実行中に画面が更新しないようにして、マクロの実行終了後に更新するように戻します。
下記のコードで、画面の更新を止めることができます。
Application.ScreenUpdating = False |
処理が終わった後は、下記のコードで画面を更新するようにできます。
Application.ScreenUpdating = True |
自動計算を停止して処理を早くするコード
もう一つ、処理を早くする方法として、自動計算を止める方法があります。
例えば、すでにエクセル上に関数が入力されている場合、その計算をマニュアルに変えることで、処理速度を上げることができます。
Application.Calculation = xlCalculationManual |
処理が終わった後は、自動計算するように下記のコードを入れておきましょう。
Application.Calculation = xlCalculationAutomatic |
注意点として、関数で処理した計算値などを用いて、次の処理を同じマクロ内で処理する場合、マニュアル計算のままだと、計算する前の値を使って処理をしてしまうので、そのような時は自動計算にして処理をするようにしてください。
ステータスバーの表示を削除するコード
ステータスバーとは、下図のようにエクセルウィンドウの左下の部分になります。
処理が長い場合など、どのような処理を実行中なのかを、このステータスバーに表示させることがあります。
一度表示させると、次の指示があるまで、ずっと表示されたままになり、マクロが終了した後も表示されたままになります。
ですので、処理を終了する前にステータスバーを削除しておく必要があります。
(表示させたままでもエラーが出るなどの不具合は無いですが、気になりますよね)
下記のコードでステータスバーを空欄にすることができます。
Application.StatusBar = “” |
完了のメッセージボックスを表示するコード
最後に、下記のようにマクロで設定した処理が終了したことを表示させて終了します。
下記のコードでメッセージボックスを表示させることができます。
MsgBox “完了しました” |
“”の中に入力した文字を表示させられるので、お好みで変更して使ってください。
まとめ
今回は、VBAでマクロを作成する際に必ず使っているお決まりの共通コードを紹介しました。
メッセージボックスを出したり、処理時間を短縮させるコードは、必ずと言っていいほど使うコードだと思うので、保存して使うようにしておくと、とても便利です。
コメント