Application は「Excel 全体そのもの」を表す“親玉オブジェクト”
まず一番イメージしてほしいのは、
Application オブジェクト = 「今動いている Excel そのもの」
ということです。
Workbook(ブック)は「ファイル」
Worksheet(シート)は「ファイルの中の1枚」
に対応しますが、
Application はそれらを全部まとめて抱えている「Excel 本体」です。
だから Application からは、
- どのブックが開いているか
- 画面を更新するかどうか
- 警告メッセージを出すかどうか
- 計算方法はどうするか
といった、「Excel 全体の設定」に関わるものを操作できます。
VBA では、Application.○○ という形でよく登場します。
Application の基本的な立ち位置と書き方
省略されている Application を意識してみる
実は、普段何気なく書いているコードの中にも、
「本当は Application が前に付いているけど省略されている」ものがたくさんあります。
例えばこれ:
Range("A1").Select
VB本当はこう書いているのと同じです。
Application.Range("A1").Select
VB同じように、
Worksheets("Sheet1").Activate
VBも、本当は
Application.Worksheets("Sheet1").Activate
VBと書けます。
「Excel 全体(Application)の中の Worksheets、その中の “Sheet1″」
という階層になっているイメージです。
超初心者のうちは、
「Application は一番上にいる“親玉”で、Range や Worksheets はその配下にいる」
くらいの感覚を持っておけば十分です。
Application でよく使う“お役立ちプロパティ”たち
ScreenUpdating:画面のチラつきを止めて高速化
大量のセルを操作するマクロを動かすと、
画面がガチャガチャ動いて遅く感じることがあります。
そのときに使うのがこれです。
Sub SampleScreenUpdating()
Application.ScreenUpdating = False ' 画面更新を止める
' ここで大量の処理をする
Dim i As Long
For i = 1 To 10000
Cells(i, 1).Value = i
Next i
Application.ScreenUpdating = True ' 元に戻す
End Sub
VBScreenUpdating = False にすると、
処理中の画面描画を止めてくれるので、体感速度がかなり上がります。
ここで超重要なのは、
「止めたら必ず最後に True に戻す」
ということです。
エラーで途中終了したときも戻せるように、本格的にはエラーハンドリングを入れますが、
まずは「False にしたら True に戻す」をセットで書く癖をつけてください。
DisplayAlerts:うるさい確認メッセージを一時的に黙らせる
ブックを上書き保存するときなどに出る「上書きしますか?」のようなメッセージを、
マクロの中では自動で「はい」にしたいことがあります。
Sub SampleDisplayAlerts()
Application.DisplayAlerts = False ' 警告ダイアログを表示しない
ThisWorkbook.Save ' 上書き保存しても確認が出ない
Application.DisplayAlerts = True ' 元に戻す
End Sub
VBこれも同じく、
「False にしたら必ず True に戻す」
が超重要です。
戻し忘れると、ユーザーが普段使うときの大事な警告まで出なくなってしまいます。
Application を使って「Excel 全体の情報」を取る
Workbooks コレクション:開いているブック一覧
Application からは、開いているブックの一覧(Workbooks)にアクセスできます。
Sub SampleWorkbooks()
Dim wb As Workbook
For Each wb In Application.Workbooks
Debug.Print wb.Name
Next wb
End Sub
VBこれは「今 Excel で開いているすべてのブック名」をイミディエイトウィンドウに出す例です。
「特定の名前のブックが開いているか確認したい」
「全部のブックに対して何か処理したい」
といったときに、Application.Workbooks から辿っていきます。
ActiveWorkbook / ActiveSheet:今アクティブなブック・シート
Application には、「今ユーザーが触っているもの」を表すプロパティもあります。
Sub SampleActive()
Dim wb As Workbook
Dim ws As Worksheet
Set wb = Application.ActiveWorkbook
Set ws = Application.ActiveSheet
MsgBox "今アクティブなブック: " & wb.Name & vbCrLf & _
"今アクティブなシート: " & ws.Name
End Sub
VB「今選ばれているブック・シートに対して処理したい」
というときに、ActiveWorkbook / ActiveSheet を使います。
Application を使うときに意識してほしい重要ポイント
「Excel 全体に効く」ものは慎重に
ScreenUpdating や DisplayAlerts のように、
Application の設定を変えるものは「Excel 全体」に影響します。
だからこそ、
変えたら必ず元に戻す
できるだけ“マクロの実行中だけ”に限定する
という意識がとても大事です。
特に DisplayAlerts を False のまま放置すると、
ユーザーが気づかないうちに上書き保存される、などの事故につながります。
Application は“入口”であり“親玉”
Range や Worksheets などは、
「どのブックの?どのシートの?」という文脈が必要ですが、
Application は「Excel 全体」からスタートする入口です。
- Application.Workbooks
- Application.Worksheets
- Application.ActiveWorkbook
- Application.ScreenUpdating
など、「Excel 全体に関わるものは Application から始まる」と覚えておくと、
オブジェクトの関係がだんだん見えてきます。
まとめ:Application は「Excel 全体を握っている一番上のオブジェクト」
Application の本質は、
「今動いている Excel 全体を表す“親玉オブジェクト”」
です。
押さえておきたいポイントをコンパクトにまとめると、
Application は省略されていることが多いが、実は一番上にいる
ScreenUpdating / DisplayAlerts などで「Excel 全体の挙動」を変えられる
Workbooks や ActiveWorkbook など、「開いているブック」にアクセスする入口でもある
設定を変えたら必ず元に戻す、というマナーが超重要
