皆さんは、VBAでApplicationオブジェクトを使ったことがありますか?
Applicationオブジェクトは、アプリケーション全体の処理・設定を操作するためのオブジェクトです。覚えておくと便利なメソッド・プロパティが多いので、よく使うものだけでも覚えておくととても便利です。
そこで今回は、
といった基礎的なことから、応用的な方法まで、徹底的に解説します!
Applicationオブジェクトとは
Applicationオブジェクトは、Excel全体をあらわすオブジェクトのことです。
Excel全体に対しての操作、設定変更をしたい場合に使います。
ただ、ApplicationオブジェクトはExcel全体なので、操作するためのメソッド・設定をするためのプロパティの量がとても多いです。
そのため、覚えておくと便利なメソッド・プロパティに絞って使い方を解説します!
Applicationオブジェクトで覚えておくと便利なプロパティ・メソッドとは
それでは、覚えておくと便利なメソッド・プロパティを解説します!
ScreenUpdatingプロパティ
ScreenUpdatingは、画面の更新を止めることができるプロパティです。
別のブックやシートからデータ取得・コピー・削除などの操作をする場合、そのままVBAの処理を動かすとシートの表示が何度も切り替わるため処理が遅くなってしまいます。
そのため、ScreenUpdatingを使って画面の更新を止めるのがおすすめです!
サンプルコード:
Sub Test1() '画面更新を停止 Application.ScreenUpdating = False ' ' 'メインの処理 ' ' '画面更新を再開 Application.ScreenUpdating = True End Sub
処理の開始でFalseを指定して画面更新停止、処理の最後でTrueを指定して画面更新再開することで、メイン処理中に画面の表示が更新されなくなり、処理を高速化することができます。
ScreenUpdatingプロパティの詳しい使い方は以下で解説しているので、気になる方は見てみてくださいね!
GetOpenFilenameメソッド
GetOpenFilenameは、ファイル選択ダイアログを使うためのメソッドです。指定したファイルを操作する処理を作りたいときに、とても便利なメソッドです。
次のように、ファイル選択ダイアログを使った処理を簡単に作ることができます。
サンプルコード:
Sub Test2() 'ファイルパスを取得 Dim strFilePath As String strFilePath = Application.GetOpenFilename(Filefilter:="Excelブック,*.xlsx,CSVファイル,*.csv") '選択したファイルパスを表示 Debug.Print "選択したファイルパス:" & strFilePath End Sub
実行直後のダイアログ:
実行結果:
選択したファイルパス:C:UsersSiroDesktopフリーランスライター1. サムライエンジニアブログ91.VBA_ApplicationオブジェクトTest.xlsx
このように、簡単にファイル選択ダイアログを使うことができます。
GetOpenFilenameメソッドの詳しい使い方については以下記事で詳しく解説しているので、気になる方は見てみてくださいね!
Runメソッド
Runは、他のブックのマクロを動かすことができるメソッドです。
「Application.Run ブック名!プロシージャー名,引数1~30」で指定したマクロを実行することができます。
Book1.xlsmサンプルコード:
Sub Test_Run() '別ブックのマクロ実行 Application.Run "Book1.xlsm!Test", "別のブックのマクロを実行しました" End Sub
Book2.xlsmサンプルコード:
Sub Test(strMessage As String) MsgBox strMessage End Sub
実行結果:
このように、簡単に別ブックのマクロを実行することができます。複数のマクロブックを使った処理を作る場合、とても便利ですね。
Displayalertsプロパティ
Displayalertsは、メッセージの表示/非表示を変更するためのプロパティです。
Trueで表示、Falseで非表示にすることができます。
ファイルの削除・ブックの削除・シートの削除で、削除確認メッセージを表示せずに処理をすすめたい場合に、よく使います。
メッセージが表示されるサンプルコード:
Sub Test() 'ブック作成 Dim wb1 As Workbook Set wb1 = Workbooks.Add 'ブック保存 wb1.SaveAs Filename:=ThisWorkbook.Path & "" & "SaveAsで保存したファイル.xlsx" 'ブックを閉じる wb1.Close End Sub
メッセージ非表示のサンプルコード:
Sub Test() 'ブック作成 Dim wb1 As Workbook Set wb1 = Workbooks.Add 'ブック保存 Application.DisplayAlerts = False 'メッセージを非表示 wb1.SaveAs Filename:=ThisWorkbook.Path & "" & "SaveAsで保存したファイル.xlsx" Application.DisplayAlerts = True 'メッセージを再表示 'ブックを閉じる wb1.Close End Sub
このように、簡単にメッセージを非表示にすることができます。
Displayalertsプロパティの詳しい使い方については以下詳しく解説しているので、気になる方は見てみてくださいね!
Waitメソッド
Waitは、処理を指定時間止めることができるメソッドです。
1秒処理を止めるサンプルコード:
Application.Wait Now() + TimeValue("00:00:01")
Now関数で現在の時刻を取得し、TimeValue(“00:00:01”)を足すことで1秒処理を止めています。
このように簡単に処理を止めることができます。
VBAの処理を止める方法は、Waitメソッド以外にSleep関数があります。
使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!
CutCopyModeプロパティ
CutCopyModeは、コピー状態を解除するためのプロパティです。
Copyメソッドでセルをコピーした際に、コピーの状態が次のように残ってしまいます。
この状態をクリアするための処理です。
サンプルコード:
Sub Test() Activesheet.Range("A3:C3").Copy Activesheet.Range("A10:C10") 'コピー Application.CutCopyMode = False 'コピー状態のクリア End Sub
実行結果:
このように簡単にコピー状態をクリアすることができます。
Copyメソッドの使い方については以下記事で詳しく解説しているので、気になる方は見てみてくださいね!
OnTimeメソッド
OnTimeは、指定した時刻に処理を実行することができるメソッドです。
OnTimeメソッドの使い方:
OnTime(マクロ実行時刻, 実行するプロシージャ名)
12時にshowMessageプロシージャを実行するサンプルコード:
'メイン処理 Sub Main() Application.OnTime TimeValue("12:00:00") , "showMessage" End Sub 'メッセージを表示する処理 Sub showMessage() MsgBox "12:00時になりました。1時間休憩してください。" End Sub
実行結果:
このように、簡単に時間指定で処理を実行することができます。
InputBoxメソッド
InputBoxは、入力画面を簡単に作ることができるメソッドです。
例えば、次のような入力画面を作ることができます。
サンプルコード:
Sub Test() Dim Num As Long Num = Application.InputBox(Prompt:="数値を入力してください", Type:=1) MsgBox Num & "を入力しました" End Sub
実行画面:
このように、簡単に入力画面を作ることができます。また、もう少し凝った画面を作りたい場合は、ユーザーフォームもおすすめです。
次のような画面を作ることができます。
InputBoxメソッドの使い方・ユーザーフォームの作り方については、以下で詳しく解説しています。
気になる方は、ぜひ見てみてくださいね!
Calculationプロパティ
Calculationは、自動計算を手動計算に変えることができるプロパティです。
次のように自動計算、手動計算を簡単に切り替えることができます。
サンプルコード:
Sub Test() '画面更新停止 Application.Calculation = xlCalculationManual '手動計算 'メイン処理******************************** 'セルの値を使って計算したいときのみ再計算実行 Application.Calculate ‘***************************************** '画面更新再開 Application.Calculation = xlCalculationAutomatic '自動計算 End Sub
Excel内に関数をたくさん使ったセル数式があると、値を書き込むだけで再計算に時間がかかってしまうので、手動にするのがおすすめです!
Calculationメソッドの詳しい使い方については以下で解説しているので、気になる方は見てみてくださいね!
Statusbarメソッド
Statusbarは、ステータスバーに値を表示するためのメソッドです。
次のように書くことで、ステータスバーに値を表示することができます。
使い方:
Application.Statusbar = 表示する値
サンプルコード:
Sub Test() Dim i As Long For i = 1 To 1000 Application.StatusBar = i & "回目の処理実行中…" Next i Application.StatusBar = False End Sub
実行途中の画面:
For文で繰り返し処理を1000回動かし、回数をステータスバーに表示するサンプルです。
処理に時間がかかってしまうようなツールを作る場合、ツールを使う人にとっては「いつ処理が終わるのか?」がわかる方がうれしいですよね。
そんな時は、ステータスバーを使って処理の進捗がわかるようにしておくのがおすすめです!
Applicationオブジェクトのメソッド・プロパティ一覧
今回は、Applicationオブジェクトでよく使われるメソッド・プロパティを抜粋して解説していますが、他にメソッド・プロパティはたくさんあります。
一度にすべて覚えるのは難しいので、この記事で良いなと思ったものをまずは取り入れてみてください。
また、「Excel全体でこんな処理ができないかな?」と思ったときは「Application やりたいこと」などでググってみると見つけやすいのでおすすめです!
ただ、他にどんなメソッド・プロパティがあるか気になる方もいますよね。
そんな方向けに、一覧が見やすくまとまっている記事があったので紹介します!
VBA Applicationオブジェクト プロパティ・メソッド 一覧
まとめ
今回は、Applicationオブジェクトでよく使うプロパティ・メソッドについて解説しました。
Applicationオブジェクトは便利なプロパティ・メソッドがとても多いです。今回解説した方法はどれも簡単なので、ぜひ使ってみてくださいね!