写すセルが複数あって規則性がない場合は以下のようにしたらよいと思います。
2つ作ってみました。ただし、2つのイベントの共存は利きません。
シートが、すでに負担になっているようでしたら、SheetActivate側をお使いください。
'SheetActivateを使ったもの
'----------------------------------------------------------------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Sh1RngArray As Variant
Dim Sh2RngArray As Variant
Dim i As Long
'ユーザー設定
'定数のデータ数は必ず同じ数にすること
Const Sh1RngData As String = "A1,B2" 'シート1側
Const Sh2RngData As String = "A2,B3" 'シート2側
'
Const Sh1Name As String = "Sheet1"
Const Sh2Name As String = "Sheet2"
'
Application.ScreenUpdating = False
Sh1RngArray = Split(Sh1RngData, ",")
Sh2RngArray = Split(Sh2RngData, ",")
If Sh.Name = Sh1Name Then
For i = LBound(Sh1RngArray) To UBound(Sh1RngArray)
Sh.Range(Sh1RngArray(i)).Value = _
Worksheets(Sh2Name).Range(Sh2RngArray(i)).Value
Next i
Else
For i = LBound(Sh1RngArray) To UBound(Sh1RngArray)
Sh.Range(Sh2RngArray(i)).Value = _
Worksheets(Sh1Name).Range(Sh1RngArray(i)).Value
Next i
End If
Application.ScreenUpdating = True
End Sub
'SheetChangeイベントのもの
'----------------------------------------------------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim SorShName As String 'ソース
Dim OpShName As String '相手先
Dim OptRngData As Variant 'データの移し変え用
Dim rtn As Variant
If Target.Count > 1 Then Exit Sub 'まとめて変更はできません。
With Sh
'データ内は、必ず同数にすること
Sh1RngData = Array("A1", "B2") 'シート1側
Sh2RngData = Array("A2", "B2") 'シート2側
If .Name = "Sheet1" Then 'シートの名前
OpShName = "Sheet2"
rtn = Application.Match(Target.Address(0, 0), Sh1RngData, 0)
If IsError(rtn) Then Exit Sub
OptRngData = Sh2RngData
Else
OpShName = "Sheet1"
rtn = Application.Match(Target.Address(0, 0), Sh2RngData, 0)
If IsError(rtn) Then Exit Sub
OptRngData = Sh1RngData
End If
Worksheets(OpShName).Range(OptRngData(rtn - 1)).Value _
= Target.Value
End With
End Sub
'----------------------------------------------------------------
お礼
大変参考になりました。 ありがとうございました。