[[20261027062733]] 『選択行のコピペ』(NK) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『選択行のコピペ』(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


コードは無視して、コメントだけを参考に推測/想像するにこれでよいのでは?
上に書いたように Select とかしなければ基本的に ActiveCell は変わりませんから。

 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


蛇足ながら「任意のセルを一つ選択」とコメントに対して
ActiveCell.Offset(-3, 0).Range("A1").Select
となぜか 3 行上を選んでるのは無視してます。
(4xmy) 2026/10/27(火) 10:05:45

>自動記録で作ったのですが
「任意のセルを一つ選択。」とありますが記録すると「Range("A4").Select」と記録されます。
ステップ実行してみると「 ActiveCell.Offset」の3か所全てエラーです。
記録されたものを編集されたのでしょうか。

>自分はうまくいかないので、
サンプルデータを示して説明をしたらどうでしょうか。
元の目的(何行をコピーしてどこに貼り付けたいのか)をはっきりさせましょう。

(マクロ苦手) 2026/10/27(火) 11:37:37


>>「 ActiveCell.Offset」の3か所全てエラーです。
Offsetの行をマイナスにしている箇所です。

(マクロ苦手) 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.