アプリ版:「スタンプのみでお礼する」機能のリリースについて

質問お願いいたします。

1つのexcelファイルにて、特定のシートのベースにし、その他のシートで入力された値がベースシートとデータを常に双方向で同期するマクロの組み方を教えて頂きたいです。
ただし、双方向で同期させるのは最新の入力があったシート同士のみとしたいです。
環境はwindows vista、 excel2007です。

具体的な例を示します。
ベースシートをsheet1とする。
sheet1のA1~A10とsheet2のB1~B10やsheet3のC1~C10を双方向でリンクさせたいです。
sheet1は未入力としておき、sheet2にデータを入力すると、sheet1に反映させ双方向で同期させます。
次にsheet3に入力するとsheet1のデータ部分に上書きし同期させます。
ただし、このときsheet2とsheet3はリンクさせたくありません。
同期を取るのは一番新しい入力があったsheet同士のみにしたいです。


当方excel初心者のため拙い説明となっておりますが、わかりにくい部分がございましたら追記させていただきます。
どうぞよろしくお願いします。

A 回答 (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行分シフトさせています。
    • good
    • 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
    • good
    • 0
この回答へのお礼

ありがとうございます。
理想としていたものにかなり近いものとなっています。
2点質問があります。

1点目です。
貼り付けたとき、B1やC1のデータしか反映されませんでした。もしかしたら私のミスかもしれませんがご確認いただいてよろしいでしょうか?

2点目です。
Sheet1への貼り付け先を変則的に変えるには、
Worksheets("Sheet1").Cells(Target.Row, "A") = Target.Value
の部分をどのように変更すればよろしいでしょうか?
たとえばSheet1のB10~B20へ張り付けるという場合です。


よろしくお願いいたします。

お礼日時:2011/02/18 18:55

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