オブジェクト Application

Application
スポンサーリンク

VBA(Visual Basic for Applications)において Application オブジェクト は、Excel 全体のアプリケーション インスタンスを表す最上位のオブジェクトです。このオブジェクトを使うことで、Excel のグローバルな設定、動作、表示、計算、エラーメッセージ、ブックやウィンドウなどに対して幅広く制御を加えることができます。


スポンサーリンク

■ Application オブジェクトとは?

Application オブジェクトは、Excel のアプリケーションそのものを指します。例えば、

  • Excel のステータスバーの制御
  • メッセージの非表示
  • 計算モードの変更
  • ワークブックやウィンドウの取得
  • Excel 全体の設定や状態取得 など

個別の Workbook や Worksheet を操作するのとは異なり、Application は Excel 全体に影響を及ぼす操作を司るオブジェクトです。


■ 基本的な使い方

Application オブジェクトは、Excel VBA 内で明示的に指定しなくても省略可能な場合がありますが、明示的に記述することでコードの意図がより明確になります。

Application.ScreenUpdating = False
Application.DisplayAlerts = False

■ 主なプロパティ

● ScreenUpdating(画面の更新制御)

処理中に画面が再描画されると処理が遅くなるため、これを False にして高速化します。

Application.ScreenUpdating = False
' 処理…
Application.ScreenUpdating = True

● DisplayAlerts(警告メッセージの抑制)

ブックを閉じる際の保存確認などを抑制します。

Application.DisplayAlerts = False
ThisWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True

● Calculation(計算モードの制御)

手動計算(xlCalculationManual)にして処理速度を上げることができます。

Application.Calculation = xlCalculationManual
' 大量のセル操作
Application.Calculate
Application.Calculation = xlCalculationAutomatic

● StatusBar(ステータスバーの表示)

進捗状況などをステータスバーに表示できます。

Application.StatusBar = "データを処理中..."
Application.StatusBar = False ' 戻す

● EnableEvents(イベント発生の制御)

イベントプロシージャの実行を一時的に無効にできます。

Application.EnableEvents = False
' 処理中に他のイベントを起こさない
Application.EnableEvents = True

● Workbooks(すべてのブック)

開いているすべての Workbook を含むコレクションです。

Dim wb As Workbook
For Each wb In Application.Workbooks
Debug.Print wb.Name
Next

● Worksheets(すべてのシート)

全 Workbook のすべてのワークシートにアクセス可能。

Application.Worksheets("Sheet1").Activate

■ 主なメソッド

● Calculate

全体の再計算を強制的に実行します。

Application.Calculate

● GetOpenFilename

ファイルを選択するダイアログを表示します(開くだけではない)。

Dim fileName As String
fileName = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx")
If fileName <> "False" Then
MsgBox "選択されたファイル: " & fileName
End If

● GetSaveAsFilename

ファイルの保存名を選ばせるダイアログ。

Dim saveName As String
saveName = Application.GetSaveAsFilename("保存ファイル.xlsx")
If saveName <> "False" Then
MsgBox "保存先: " & saveName
End If

● Wait

指定した時間まで処理を一時停止します。

Application.Wait Now + TimeValue("00:00:02") ' 2秒停止

● OnTime

指定した時刻にマクロを実行する予約をします。

Application.OnTime Now + TimeValue("00:01:00"), "MyMacro"

■ Application イベント

Application にもイベントがありますが、通常のモジュールではなく「ThisWorkbook」ではなく「クラスモジュール」を使って定義します。たとえば:

' クラスモジュール名: clsApp
Public WithEvents App As Application

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
MsgBox "ブックが開かれました:" & Wb.Name
End Sub

このクラスを使うには標準モジュールで以下のように記述:

Dim myApp As New clsApp

Sub InitAppEvents()
Set myApp.App = Application
End Sub

■ 実用的な活用例

● 大量データを扱うときの高速化処理

Sub 高速処理()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With

' データ処理
' 例: シート間コピーや集計

With Application
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub

■ Application オブジェクトのメリットと注意点

特徴内容
グローバルな制御Excel 全体の状態(計算、表示、警告、ダイアログ)を制御可能
パフォーマンス向上再描画やイベントを停止することで大量データ処理が高速化
UI との連携ステータスバーやファイルダイアログなど、ユーザーとのインタラクション制御
注意点無効化したプロパティは必ず元に戻す(例:DisplayAlertsEnableEvents

■ まとめ

項目内容
オブジェクト名Application(アプリケーション)
役割Excel 全体の動作・環境設定・イベント制御
代表的プロパティScreenUpdating, DisplayAlerts, EnableEvents, Calculation, StatusBar
代表的メソッドCalculate, Wait, OnTime, GetOpenFilename, GetSaveAsFilename
使用場面処理高速化、イベント制御、UI制御、ファイル選択など
注意点無効にしたプロパティは確実に True に戻す。例外処理やエラー処理とセットで使うべき
タイトルとURLをコピーしました