'ループ用の変数宣言 Dim zz対象Ws As Worksheet '特定のブックの全シートを再計算 For Each zz対象Ws In Workbooks("Book1.xlsx").Worksheets zz対象Ws.Calculate Next zz対象Ws
再計算を行うには対象のオブジェクトに対して「Calculate」メソッドを使用します
しかし、Workbookオブジェクトにはこのメソッドがありません
そのため、複数のブックを開いた状態で1つだけのブックを再計算するには少し工夫が必要となります
それがこの記事コードになります
このコードを利用することで、複数のブックを開いた状態であっても特定のブックのみを再計算することが可能となるので極端に時間のかかる再計算の不要なブックを除外することが可能になります
コード解説
コードの流れ自体は非常に簡単なものです
Worksheetオブジェクトをループで再計算を実行していくだけです
'ループ用の変数宣言 Dim zz対象Ws As Worksheet
まずはループで利用するためのWorksheetオブジェクトを代入する変数を宣言します
この時の型はObject型でも構いませんが、Worksheet型にしておくとコード入力の際にインテリセンスが利用できるので便利です
'特定のブックの全シートを再計算 For Each zz対象Ws In Workbooks("Book1.xlsx").Worksheets ~~~ Next zz対象Ws
次にループ処理の個所です
ForEachループによって特定のWorkbookに含まれるWorksheetを全てループします
ここで大切なこととして、Excelのシートにはオブジェクトが複数あります
主にはWorksheetとSheetです
特に後者のSheetオブジェクトはマクロの記録でよく出てきます
For Each zz対象Ws In Workbooks("Book1.xlsx").Sheets ~~~ Next zz対象Ws
このコードの様にWorksheetオブジェクトでは無く、 Sheetオブジェクトとしてもほとんどの場合問題なく動作します
このSheetオブジェクトにはグラフシートやマクロシートなどの通常Excelで使用する方眼紙シート以外のものも含まれます
そのため再計算を行う目的であれば、Worksheetオブジェクトを指定する方が良いです
そして、「Workbooks(“Book1.xlsx”)」の引数の文字列を対象とするブックの名前に変更すれば任意のブックを指定することが出来ます
zz対象Ws.Calculate
ループ内処理はWorksheetオブジェクトに対してCalculateメソッドを実行しているだけです
この様にして複数のブックを開いた状態で特定のブックのみの全シートを再計算させることが出来ます
使いどころが限定的ですが、知っていれば処理時間を短くすることも可能なので有用だと思います
全ブックまとめて再計算するほうがええねん、という方は以下の記事を確認してください