• 締切済み

excelマクロで複数シート間のデータ同期方法

質問お願いいたします。 1つのexcelファイルにて、特定のシートのベースにし、その他のシートで入力された値がベースシートとデータを常に双方向で同期するマクロの組み方を教えて頂きたいです。 ただし、双方向で同期させるのは最新の入力があったシート同士のみとしたいです。 環境はwindows vista、 excel2007です。 具体的な例を示します。 ベースシートをsheet1とする。 sheet1のA1~A10とsheet2のB1~B10やsheet3のC1~C10を双方向でリンクさせたいです。 sheet1は未入力としておき、sheet2にデータを入力すると、sheet1に反映させ双方向で同期させます。 次にsheet3に入力するとsheet1のデータ部分に上書きし同期させます。 ただし、このときsheet2とsheet3はリンクさせたくありません。 同期を取るのは一番新しい入力があったsheet同士のみにしたいです。 当方excel初心者のため拙い説明となっておりますが、わかりにくい部分がございましたら追記させていただきます。 どうぞよろしくお願いします。

みんなの回答

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

NO1です。 >1点目です。 >貼り付けたとき、B1やC1のデータしか反映されませんでした。  ⇒多分、複数セルに同時に入力された場合、このような振舞になりますので以下のコードに変更   して下さい。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("B1:B10")) Is Nothing Then Exit Sub For Each a In Range(Target.Address) Worksheets("Sheet1").Cells(a.Row, "A") = Target.Value Next End Sub >2点目です。 >Sheet1への貼り付け先を変則的に変えるには、  ⇒例えば、B10:B20では11セルがあるのでとりあえず、B11:B20として回答します。 Worksheets("Sheet1").Cells(Target.Row, "B").Offset(10) = Target.Value   Cellsの第2引数でB列、Offsetで10行分シフトさせています。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 (1)Sheet2タブ上で右クリック→コードの表示→以下のコードを貼り付け Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("B1:B10")) Is Nothing Then Exit Sub Worksheets("Sheet1").Cells(Target.Row, "A") = Target.Value End Sub (2)Sheet3タブ上で右クリック→コードの表示→以下のコードを貼り付け Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C1:C10")) Is Nothing Then Exit Sub Worksheets("Sheet1").Cells(Target.Row, "A") = Target.Value End Sub

j_tonsuke
質問者

お礼

ありがとうございます。 理想としていたものにかなり近いものとなっています。 2点質問があります。 1点目です。 貼り付けたとき、B1やC1のデータしか反映されませんでした。もしかしたら私のミスかもしれませんがご確認いただいてよろしいでしょうか? 2点目です。 Sheet1への貼り付け先を変則的に変えるには、 Worksheets("Sheet1").Cells(Target.Row, "A") = Target.Value の部分をどのように変更すればよろしいでしょうか? たとえばSheet1のB10~B20へ張り付けるという場合です。 よろしくお願いいたします。