マクロを作成すると、実行することを選択したときにいつでも実行されるように設計されています。ワークシートで何かが変更されるたびに実行されるマクロを開発する必要がある場合はどうなりますか?マクロを自動的に実行したい場合はどうなりますか?これは、ワークシートのセル内で使用するカスタム関数を作成する場合に特に必要です。

ここで、Volatileメソッドが役立ちます。マクロ内に次のステートメントを含めるだけです。

Application.Volatile

これにより、マクロの結果はワークシートの値に依存し、ワークシートが再計算されるたびに実行する必要があることがExcelに通知されます。たとえば、次のユーザー定義関数について考えてみます。

Function CountCells(MyRange As Range)

Dim iCount As Integer     iCount = 0     For Each cell In MyRange         If cell.HasFormula Then             iCount = iCount + 1         End If     Next cell     CountCells = iCount End Function

この関数をセルで使用すると、指定した範囲内の数式を含むセルの数がカウントされます。ただし、この関数は、セルに初めて入力されたとき、または数式を含むセルが編集されたときにのみ実行されます。ワークシートが再計算されるたびに関数が再計算されるようにする場合は、関数の先頭近くにVolatileメソッドを追加します。

Function CountCells(MyRange As Range)

Dim iCount As Integer     Application.Volatile     iCount = 0     For Each cell In MyRange         If cell.HasFormula Then             iCount = iCount + 1         End If     Next cell     CountCells = iCount End Function

Application.Volatileメソッドが含まれているということは、ワークシートが再計算されるたびに、この関数(マクロ)が再度実行されることを意味します。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(10598)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excel-Forcing_a_Macro_to_Run_when_a_Worksheet_is_Recalculated [ワークシートの再計算時にマクロを強制的に実行する]