Excel VBA | 超初心者(Excel操作+マクロ体験):Excelオブジェクト基礎 - Application

Excel VBA VBA
スポンサーリンク

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
VB

ScreenUpdating = 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 など、「開いているブック」にアクセスする入口でもある
設定を変えたら必ず元に戻す、というマナーが超重要

VBAVBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました