『選択行のコピペ』(NK)
自動記録で作ったのですが
複雑な選択範囲をすると相対参照でも自分はうまくいかないので、
よろしくお願いします。
Sub Macro3()
' Macro3 Macro
Application.EnableEvents = False'------イベントマクロを制御。
ActiveCell.Offset(-3, 0).Range("A1").Select'-----任意のセルを一つ選択。
Selection.End(xlDown).Select'-----------------その選択したセルから一つ下のセルを選択。
ActiveCell.Offset(-3, 0).Range("A1:A4").Select'-----その選択したセルから途中空白行を含まない最下行まで選択。
ActiveCell.Activate'--------その選択したセルをすべてコピー。
Selection.Copy
ActiveCell.Offset(-4, 0).Range("A1").Select'------1番最初に選択したセルに上書き貼付け。
ActiveSheet.Paste'--------------この時に最下行とその上の一つのデータがダブルはずです。
ActiveCell.Offset(4, 0).Range("A1").Select'-------その貼付け先の最下行を選択。
ActiveCell.FormulaR1C1 = ""-------その貼付け先の最下行をクリア(この時に行を削除して上に詰めないでください。) 'Application.EnableEvents = False --------イベントマクロはONにしなくていいです。 End Sub
< 使用 Excel:Excel2021、使用 OS:Windows11 >
と書かれても、コメントとコードがマッチしていないので、何をしたいのか分かりません。
とりあえず Select すれば ActiveCell は変わります、ということはアドバイスしておきます。
(4xmy) 2026/10/27(火) 09:25:53
Sub Sample()
Application.EnableEvents = False
'任意のセルが選択されているものとしてそのひとつ下から途中空白行を含まない
'最下行まで選択してコピーして最初に選択されていたセルにペースト
Range(ActiveCell.Offset(1), ActiveCell.Offset(1).End(xlDown)).Copy ActiveCell
'最下行をクリア
ActiveCell.End(xlDown).EntireRow.ClearContents
'通常このプロパティは True に戻すべき
Application.EnableEvents = True
End Sub
(4xmy) 2026/10/27(火) 10:03:02
>自分はうまくいかないので、
サンプルデータを示して説明をしたらどうでしょうか。
元の目的(何行をコピーしてどこに貼り付けたいのか)をはっきりさせましょう。
(マクロ苦手) 2026/10/27(火) 11:37:37
(マクロ苦手) 2026/10/27(火) 15:11:05
geminiに聞いたら マクロ記録特有の動作みたいですね AcitveCellのRange objは選択したセルの左上をA1として範囲の表現として記載するみたいです。 動作だけ書き下しました。
再現するときはマクロ記録をしたときと同じ条件で実行すれば動くと思います。
> ActiveCell.Offset(-3, 0).Range("A1").Select'-----任意のセルを一つ選択。
ActiveCell→ 最初に選択していたセル
.offset(-3,0) → 選択していたセルの3つ上
.Range("A1") → 新たに選択したセルが1行1列
> Selection.End(xlDown).Select'-----------------その選択したセルから一つ下のセルを選択。 選択したセルから ctrl+↓が押された
> ActiveCell.Offset(-3, 0).Range("A1:A4").Select'-----その選択したセルから途中空白行を含まない最下行まで選択。
アクティブセルから三つ上から4行1列を選択
> ActiveCell.Activate'--------その選択したセルをすべてコピー。 選択した範囲が選択された
> Selection.Copy 選択した範囲のコピー
> ActiveCell.Offset(-4, 0).Range("A1").Select'------1番最初に選択したセルに上書き貼付け。
アクティブセルから4つ上のセルを選択
> ActiveSheet.Paste'--------------この時に最下行とその上の一つのデータがダブルはずです。 アクティブセルに貼り付け
> ActiveCell.Offset(4, 0).Range("A1").Select'-------その貼付け先の最下行を選択。
アクティブセルから4つ下の1行1列を選択
> ActiveCell.FormulaR1C1 = ""-------その貼付け先の最下行をクリア(この時に行を削除して上に詰めないでください。) 選択されたセルを削除(????)
> 'Application.EnableEvents = False EnableEvents objはVBAだけが対象みたいなんでfalseでもいいのかな?
記録された操作は 任意セルをC5スタートとすると
C2選択 ctrl+↓を入力 C2:C5選択 C1選択 ctrl+v C5選択 deleteを入力
ですかね
(ちくわ) 2026/10/27(火) 16:09:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.