【Excel VBA】Applicationの各種プロパティの活用

ExcelVBAヘッダー Excel VBA

今回の記事は、Applicationオブジェクトについてです。

Applicationオブジェクトとは、言わば今、開いているExcelファイルのことを指します。

つまり、今、開いているExcelファイルに対して、何等かの処理を行う時に使います。

Applicationオブジェクトには、多くのプロパティが用意されており、Excelファイルに対して行いたい処理に応じて使い分けていきます。

今回はよく使うプロパティにフォーカスを当てて解説していきたいと思います。

Cursorプロパティ

このCursorプロパティを指定すると、マウスポインターを変更することができます。

マクロ処理中は「xlWait」を指定して、ポインターを砂時計にしておきましょう。

処理後は「xlDefault」を指定して、標準のポインターに戻しておくことも忘れずに。

解説
xlDefault 標準のポインター
xlIbeam I 字型ポインター
xlNorthwestArrow 矢印型ポインター
xlWait 砂時計型ポインター

Calculationプロパティ

マクロの処理中に自動計算が働いているとそれだけ、処理に時間がかかってしまいます。

いったん、自動計算しないように設定し、処理が終わった後に自動計算を再度、有効にするとよいでしょう。

解説
xlCalculationAutomatic Excelの自動計算が有効になります。
xlCalculationManual Excelの自動計算が無効になり、手動での計算になります。

ScreenUpdatingプロパティ

マクロの処理の前に「False」にすれば、処理中の画面表示が更新されていきませんので、より速く処理を終えることができます。

処理後に「True」に戻すことを忘れないようにしましょう。

解説
False マクロ実行中に画面表示の更新をしないようにすることができます。画面表示を更新する処理を省くことができるため、それだけ処理時間が短くてすみます。
True マクロ実行中に画面表示を更新するようにします。処理時間がそれだけかかります。

DisplayAlertsプロパティ

マクロの処理の前に「False」にすれば、処理中に警告やメッセージを強制的に表示させないことができます。

処理後に「True」に戻すことを忘れないようにしましょう。

解説
False マクロ実行中に警告やメッセージを表示しないようにすることができます。煩わしい操作を省くことができます。
True マクロ実行中に警告やメッセージを表示するようにします。処理中なだけに、煩わしい操作が発生してしまいます。

StatusBarプロパティ

指定した文字列がステータスバーに表示されるようになります。

Application.StatusBar = "実行中です"

上のようにすれば、ステータスバーに文字列「実行中です」が表示されます。

元に戻すには、「False」または「vbNullString」と指定しましょう。

使いたいプロパティを一つにまとめよう

Applicationオブジェクトの主要なプロパティについて、解説してきましたが、これら使いたいプロパティを一つのプロシージャにまとめてしまって、処理をする時にそのプロシージャを呼び出すようにしてしまえば、何度もプロパティを指定する手間が省けます。

プログラムもわかりやすくなりますし、メンテナンスも楽になります。

何より、コーディングしていく上で、書き忘れを防ぐことができます。

書き忘れることで、思わぬ不具合を招くことがありますからね。

例えば、下のようなプロシージャを作っておいて、処理する度に呼び出してみてはいかがでしょうか。

最初は、処理の前に呼び出すプロシージャです。

Public Sub BeforeProc()
        With Application
        'マウスカーソル・ステータスバー変更
                .Cursor = xlWait
                .StatusBar = "処理実行中..."

        '自動計算を停止
                .Calculation = xlCalculationManual

        '画面表示モーション停止
                .ScreenUpdating = False

        '確認メッセージを表示しないように
                .DisplayAlerts = False
        End With
End Sub

「処理前」だから、「BeforeProc」なんていう名前にしてみました。

次に、処理の後に呼び出すプロシージャです。

Public Sub AfterProc()
        With Application

        '確認メッセージを表示するように
                .DisplayAlerts = True


        '画面表示モーション再開
                .ScreenUpdating = True


        '自動計算を再開
                .Calculation = xlCalculationAutomatic

   
     'マウスカーソル・ステータスバー変更
                .Cursor = xlDefault
                .StatusBar = False
        End With
End Sub

「処理後」だから、「AfterProc」なんていう名前にしてみました。

双方とも、標準モジュールに用意するといいでしょう。

スコープ範囲はPublicですので、全てのモジュールから呼び出すことができます。

処理前と処理後に、先ほどのプロシージャを呼び出すことで、処理速度を速くすることができます。

さらに処理中の見た目もスマートなマクロを作ることができるでしょう。

タイトルとURLをコピーしました