Johnは、ユーザーが最後に変更したセルをVBAで識別する方法があるかどうか疑問に思います。彼は、セルがマクロによって変更されたかどうか、具体的にはユーザーによって変更されたかどうかを知りたくありません。

答えはイエスです—ある種。 Worksheet_Changeイベントを使用して、ワークシートの特定のセルが変更されたときに記録するハンドラーを作成できます。これを行うマクロは、次のようにかなり単純な場合があります。

Private Sub Worksheet_Change(ByVal Target As Range)

Application.StatusBar = Target.Address End Sub

マクロは、最後の変更のアドレスをステータスバーに配置するだけです。次のように、マクロを変更して、グローバル変数(イベントハンドラーの外部で宣言)のアドレスを維持することができます。

Dim sAddr As String

Private Sub Worksheet_Change(ByVal Target As Range)

sAddr = Target.Address(False, False)

End Sub

次に、通常のマクロを使用して、sAddr変数に格納されているアドレスを取得し、それを使って好きなことを行うことができます。

イベントハンドラーがマクロによって行われた変更を記録しないようにすることに関しては、これを行う唯一の方法は、ワークシートを変更するマクロコマンドを実行する前にイベント処理をオフにすることです。たとえば、次のEnableEventsプロパティの変更は、セルA1の内容を変更するコマンドの前後に使用できます。

Application.EnableEvents = False Range("A1") = "Hello"

Application.EnableEvents = True

イベント処理をオフにすると、Worksheet_Changeイベントハンドラーはトリガーされず、「最終変更」アドレスは更新されません。その結果、マクロによって行われた変更ではなく、ユーザーによって行われた変更のみを追跡することになります。

注:

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

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

このヒント(3819)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。