プロが教えるわが家の防犯対策術!

質問させていただきます。

EXCELにて、"シート1"のA1~C3と"シート2"のD4~F6を
同期化したく考えております。

・いわゆる一方のシートが「読み取り専用」になってしまうリンク貼り付けではなく、シート1、シート2相互が書き換え可能の同期化です。
・A1とD4、B3とE6、のように互いに照合箇所のセル同士を同期反映させたいと考えております。

なお、他の質問を参照したところ、
シート1のA1とシート2のD4の単一セルを同期かする方法は確認できました。(以下参照)
*****************************************************************
シート1のコードは
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Worksheets("シート2").Range("D4") = Target
End If
End Sub
シート2のコードは
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$4" Then
Worksheets("シート1").Range("A1") = Target
End If
End Sub
***************************************************************

これを参考にVBAの
シート1のコードエディターに

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
Worksheets("シート2").Range("D5") = Target
End If
End Sub

シート2のコードエディターに

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$5" Then
Worksheets("シート2").Range("A2") = Target
End If
End Sub

というように追記していったのですが、エラーとなってしまいます。

お詳しい方がおられましたらお願いいたします。

A 回答 (1件)

ひょっとして、ルーチンごとコピーされていますか?


だとすると同名のサブルーチンが存在するためのエラーではないでしょうか。

Private Sub... ~ End Sub
の中身だけを追記していけば良いと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます!!
まったくほぼ仰るとおりのことをしておりました。
とても、きちんと確認をせずに質問してしまい、恐縮しきりです。

本来は以下のようにすべきところを、

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Worksheets("シート2").Range("D4") = Target
End If
If Target.Address = "$A$2" Then
Worksheets("シート2").Range("D5") = Target
End If
End Sub

誤って以下のように記述しておりました。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Worksheets("シート2").Range("D4") = Target
If Target.Address = "$D$5" Then
Worksheets("シート2").Range("A2") = Target
End If
End If
End Sub

すぐにご指摘くださり、誠に感謝いたします。
本当にありがとうございました。

お礼日時:2008/11/20 23:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!