• ベストアンサー

列のデータに変化があるとマクロを実行

A列 - B列 - C列 - D列 1 - 123 - 234 - 678 2 - 456 - 567 - 890 3 - 333 - 444 - 555 4 - 765 - 876 - 321 5 - ? - ? - ? 6 - ? - ? - ? の様なデータがあり行のデータ日々増すとき C列最終行のデータD1に出したいのですが? C列のデータに変化があるとマクロを実行して 常にC列最終行のデータD1に出したいのです どなたか良きアドバイスをお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kuma3f
  • ベストアンサー率63% (28/44)
回答No.1

思われていることと違っていましたらすみませんが、C列の最終行のデータを セルD1に表示させるだけでしたら、C列を入力後セルがD列に移動した瞬間 (D列を選択すると)イベントを実行させるマクロではどうでしょうか。 参考までに下記のコードをSheet1のコードに貼り付けてみてください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'D列を選択するとイベントを実行する Dim C列最終行, 列 As Long Application.MoveAfterReturnDirection = xlToRight '右へ移動 列 = ActiveCell.Column If 列 = 4 Then 'アクティブセルがD列なら Sheets("sheet1").Range("C65536").End(xlUp).Select C列最終行 = ActiveCell.Row 'C列の最終行 Sheets("sheet1").Range("D1") = Sheets("sheet1").Cells(C列最終行, 3) 'C列の最終行をD1に表示 Sheets("sheet1").Cells(C列最終行 + 1, 1).Select End If End Sub

yama0192
質問者

補足

早速のアドバイス有難うございます私の説明不足で申し訳ないのですが 列最終行のデータは他のシートからコピーはりつけをするときもあり この様なときはどうしたらよいかお手数を掛けますが再度宜しく お願い致します。

その他の回答 (1)

  • kuma3f
  • ベストアンサー率63% (28/44)
回答No.2

C列の最終行までに空白が無ければ、次のコードまたは関数であればコピー貼り付けしたデータも大丈夫だと思います。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim C列最終行 As Long C列最終行 = Application.WorksheetFunction.CountA(Worksheets("sheet1").Range("C1:C65536")) Sheets("sheet1").Range("D1") = Sheets("sheet1").Cells(C列最終行, 3) 'C列の最終行をD1に表示 End Sub または、マクロではなくセルのD1に次の関数を入れても同じ結果になります。 =INDEX(C:C,COUNTA(C:C)) C列の最終行までに空白があると上記では最終行を判断できないのですみません。

yama0192
質問者

お礼

アドバイス有難うございました。 マクロではなく INDEX(C:C,COUNTA(C:C)) で 私の希望どうりの動作がしました マクロについては勉強の教材として 使わせて頂きます。

関連するQ&A