Joydipには、ライブ商品市場データで常に自動的に更新されるExcelワークシートがあります。彼は、指定されたセル/範囲のデータがいくつかの事前定義された基準を満たすように変更されるたびに、特定のメッセージを含むメッセージボックスを表示したいと考えています。データが自動的に変更されたときに検証機能がトリガーされないため、データ検証は機能しません。

データをチェックして目的のメッセージボックスを表示する最良の方法は、Worksheet_Changeイベントによってトリガーされるマクロを使用することです。このイベントは、セルの内容が変更されるたびにトリガーされます。ただし、セルに表示される内容の変更によってトリガーされるわけではありません。たとえば、新しい商品データがセルに配置されると、イベントがトリガーされます。ただし、数式が再計算され、その数式の新しい結果が表示された場合、イベントはトリガーされません。どうして?

数式自体は変更されていないためです。変更されたのは、式(表示されるもの)の結果のみでした。

Worksheet_Changeイベントがトリガーされると、マクロはメッセージの表示など、実行したいことをすべて実行できます。この例では、チェックする範囲がA1:C5(商品データが挿入される場所)であり、メッセージをトリガーする基準が範囲の平均が5であると仮定します。範囲内のセルが変更され、範囲内の値の平均が5になると、メッセージが表示されます。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim rng As Range     Set rng = Range("A1:C5")

If Not Intersect(Target, rng) Is Nothing Then         If Application.WorksheetFunction. _           Average(rng) = 5 Then             MsgBox "The average of " & _               rng.Address & " = 5"

End If     End If     Set rng = Nothing End Sub

このマクロは、監視するワークシートのシートオブジェクトに配置することが重要です。 VBAエディターを表示したら、プロジェクトエクスプローラー領域で目的のワークシートを右クリックし、表示されるコンテキストメニューから[コードの表示]を選択します。このコードウィンドウは、マクロを配置する場所です。

この場合も、ワークシートのどこかに変更があった場合はいつでもマクロがトリガーされます。次に、マクロは交差関数を使用して、変更が目的のA1:C5範囲内で発生したかどうかを判別します。含まれている場合は、範囲の平均がチェックされ、結果が5の場合はメッセージが表示されます。

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

このヒント(2906)は、Microsoft Excel 97、2000、2002、および2003に適用されます。