Excelで複数のシートに同じ処理を自動で適用したい場合、Worksheet_Change イベントではシートごとに個別に記述する必要があります。全シートで同じ処理を行いたい場合は、標準モジュールに汎用マクロを作成し、各シートのイベントから呼び出す方法が簡単です。
標準モジュールにマクロを作成
まず、標準モジュールに以下のサブルーチンを作成します。
Public Sub ProcessCellChange(ByVal Target As Range)
If Intersect(Target, Target.Worksheet.Range("D74:D7")) Is Nothing Then Exit Sub
If Target.Value = "" Then Exit Sub
Dim x As Variant, y As Variant
x = Target.Value
With Application
.ScreenUpdating = False
.EnableEvents = False
.Undo
y = Target.Value
Target.Value = x + y
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
各シートのWorksheet_Changeで呼び出す
各シートのコードウィンドウに以下を記述します。これで全シート共通の処理が実行されます。
Private Sub Worksheet_Change(ByVal Target As Range)
Call ProcessCellChange(Target)
End Sub
ポイントと注意
- 標準モジュールに処理をまとめることで、修正も一箇所で済む
- 各シートから呼び出すだけで同じ処理を適用可能
- Intersect で対象範囲を指定しているため、必要に応じて範囲を調整
- Undo を使用して前の値を取得する方式のため、EnableEvents をオフにして無限ループ防止
まとめ
Excelで全シートに同じマクロを実行させたい場合は、標準モジュールに汎用サブルーチンを作成し、各シートの Worksheet_Change イベントから呼び出す方法が最もシンプルです。これにより、修正やメンテナンスも容易になり、全シートで同じ処理を自動的に実行できます。

コメント