• 締切済み

VBA チェンジイベント 別シートにデータ転記

お世話になります。チェンジイベント初心者です。 同一BOOK内の特定のコラムのセルを選択した場合に、自動的に他のシートの特定のセルにデータを転記させたいのですが、どう書けばよいのか分かりません。添付の画像と下記マクロをご覧になって下さい。 -マクロ- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If 1 = ActiveCell.Column Then Worksheets("01").Cells(ActiveCell.Row, 3) = Cells(ActiveCell.Row, 1) Worksheets("01").Cells(ActiveCell.Row, 4) = Cells(ActiveCell.Row, 2) End If End Sub メインのシートは[01]です。このシートのC4を選択し、次に[02]のA列にあるセルを選択すると、[02]のA列・B列のデータがC4・D5に転記されるようにしたいのですが、画像にあります通り[02]のA5を選択してしまうと、[01]のC5・D5に転記されてしまいます。 どのようにすれば、[01]でアクティブにしておいた行の3列目、4列目に転記が行われるのでしょうか? よろしくご指南くださいませ。

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

こんなのは如何? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If 1 = Target.Column Then Target.Resize(1, 2).Copy Worksheets("01").Paste Application.CutCopyMode = False End If End Sub ただのコピペです

TENSAW
質問者

お礼

シンプルですね!とっても好きです。 Resize(1, 2)・・・初めて見ました。 参考になりました。 ありがとございます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

シート01とシート02の両方にマクロを設定するとよいでしょう。 シート01では次のようにします。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If 3 = ActiveCell.Column Then Range("G1") = ActiveCell.Row End If End Sub C列で選択したときの行番号をたとえばG1セルに記録しておきます。 シート02では次のようにします。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If 1 = ActiveCell.Column Then n = Worksheets("Sheet1").Range("G1") If n = "" Then Exit Sub Worksheets("Sheet01").Cells(n, 3) = Cells(ActiveCell.Row, 1) Worksheets("Sheet01").Cells(n, 4) = Cells(ActiveCell.Row, 2) End If End Sub なお、たとえば前の操作でA5セルがアクティブセルになっている状態ですとそのままではマクロが実行されません。一旦別のセルを選択してからA5セルを選択することでマクロが実行されます。

TENSAW
質問者

お礼

なるほど、面白いですね。一旦メモをとっておくなんて、思いつきもしませんでした。 参考になりました。ありがとうございます。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

ActiveCellがシート02を参照しているためです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If 1 = ActiveCell.Column Then Worksheets("01").Activate n = ActiveCell.Row Worksheets("02").Activate Worksheets("01").Cells(n, 3) = Cells(ActiveCell.Row, 1) Worksheets("01").Cells(n, 4) = Cells(ActiveCell.Row, 2) End If End Sub

TENSAW
質問者

お礼

さっそくのお返事ありがとうございました。 先にSheet01のセルのRowを読み込ませておくんですね。 参考になります。

関連するQ&A

専門家に質問してみよう