VBA Calculate – ワークブック、ワークシート、または範囲を今すぐ計算する

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 3月 16, 2022

このチュートリアルでは、VBAのさまざまな計算オプションのすべてを学びます。

Excelのデフォルトでは、ワークブックが変更されるたびに、開いているすべてのワークブックが計算されます。これは、セルA1が変更された場合、セルA1に依存しているすべてのセルを更新するなど、計算ツリーに従うことによって行われます。 しかし、セルが変更されるたびにExcelが再計算を行うため、VBAコードの実行速度が極端に遅くなる可能性があります。 VBAの速度を上げるために、プロシージャの最初に自動計算を無効にすることがよくあります。処理の始めに、

Application.Calculation = xlManual

として自動計算を無効にし、処理の最後に再有効化します。

Application.Calculation = xlAutomatic

しかし、プロシージャの中でワークブックのすべて(または一部)を計算したい場合はどうすればよいのでしょうか。 このチュートリアルの残りの部分では、その方法を説明します。

今すぐ計算する

Calculateコマンドを使用すると、すべて(開いているすべてのワークブック)の再計算が可能です。

Calculate

通常、この方法が最も適しています。しかし、より狭い範囲で計算を行い、スピードを向上させることも可能です。

シートのみを計算する

特定のシートのみを計算するようにVBAに指示することもできます。 このコードでは、アクティブなシートのみを再計算します。

ActiveSheet.Calculate

このコードはSheet1を再計算します。

Sheets("Sheet1").Calculate

範囲を計算する

より狭い範囲の計算が必要な場合は、セルの範囲のみを計算するようにVBAに指示することができます。

Sheets("Sheet1").Range("a1:a10").Calculate

個別の計算式を計算する

このコードでは、個々のセルの数式だけを計算します。

Range("a1").Calculate

ワークブックを計算する

一つのワークブックのみを計算するVBAオプションはありません。一つのワークブックのみを計算したい場合であっても、Calculateコマンドを使用するしかありません。

Calculate

この方法では開いているすべてのワークブックを計算してしまいますので、どうしてもスピードを重視する必要がある場合、一度に開くワークブックを厳選するという方法もあります。

ワークブックを計算する – 動作しない方法

VBAで一つのワークブックだけを計算させる方法はいくつかありますが、どれも完全には動作しません。 以下のコードは、ワークブック内の各ワークシートをループして、一度に1シートずつ再計算を行います。

Sub Recalculate_Workbook()
    Dim ws As Worksheet
    
    For Each ws In Worksheets
        ws.Calculate
    Next ws
End Sub

このコードは、すべてのワークシートが「自己完結型」である場合、つまり、どのシートも他のシートを参照するような計算を含んでいない場合にはうまく機能します。

しかし、ワークシートが他のシートを参照している場合、計算が正しく更新されないことがあります。 例えば、Sheet1の計算をSheet2より先に行い、Sheet1の計算式がSheet2の計算に依存している場合、計算式に最新の値が含まれないことになります。

また、すべてのシートを一度に選択し、アクティブシートを計算することもできます。

ThisWorkbook.Sheets.Select
ActiveSheet.Calculate

ただし、この場合も同じ問題が発生します。

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples