標準モジュール SyncroValue()
'----- 同期すべきセル名のリスト
Private Const syncroCellNamesStr = "titleText,xAxis,yAxis"
Private Property Get syncroCellNames()
syncroCellNames = Split(syncroCellNamesStr, ",")
End Property
'----- 各ワークシートの Worksheet_Change イベントから呼ぶ
Public Sub SyncroValue(ByVal Target As Range)
Dim cellName, syncroCellName
On Error GoTo trap
cellName = Target.Name.Name
cellName = Mid(cellName, InStr(cellName, "!") + 1)
For Each syncroCellName In syncroCellNames
If syncroCellName = cellName Then _
changeMutualValue cellName, Target.value
Next
trap:
End Sub
'----- titleName, xAxisName, yAxisName を全シートで同期させる
Private Sub changeMutualValue(cellName, newValue)
Dim Worksheet
On Error Resume Next
For Each Worksheet In ThisWorkbook.Worksheets
Worksheet.Range(cellName).value = newValue
Next
End Sub
これを、各ワークシートのイベントから呼び出すのは、次のようにします。同期したいセルが含まれているすべてのワークシートにこのイベント処理ルーチンをいれておきます。
各ワークシート Worksheet_Change()
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
SyncroValue Target
Application.EnableEvents = True
End Sub
こうやっておけば、たとえば titleText をどこで直しても、ほかにちゃんと反映されます。気持ちがいいですよ。