プロが教えるわが家の防犯対策術!

エクセルでマクロを使いたいと思っています。

コピー後の貼り付け先を毎回指定したところにしたいのですが、
やりたいことの例として現在できているのは、

シート1のA列最終行のセルをコピー ⇒ シート2のA3セルへ貼り付け
シート1のC列最終行のセルをコピー ⇒ シート2のC3セルへ貼り付け

のような感じです。
これを、

シート1のA列最終行のセルをコピー ⇒ シート2のA4セルへ貼り付け
シート1のC列最終行のセルをコピー ⇒ シート2のC4セルへ貼り付け

といったように、次実行するときにはシート2の別の行に貼り付けたいです。
初心者なので、マクロを記録してそのまま実行しておりソースが長く
なっていますが、以下のようになっています。
-------------------------------------------------------------------------------------------

Sheets("シート1").Select
Range("A1").Select
Selection.End(xlDown).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("シート2").Select
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

-------------------------------------------------------------------------------------------

貼り付け先の、Range("A3").Select 部分の指定が悪いのはわかるのですが、
どう指定すればよいのかわからず困っています。

お詳しい方ご教授よろしくお願いいたします。

質問者からの補足コメント

  • 質問の仕方がわかりづらくてすみません!

    貼り付ける行が毎回変わってくる(次回はA5とC5、その次はA6とC6)ので、セル固定ではなく任意の場所に貼り付けられるようにしていしたいです。

      補足日時:2022/08/12 11:22

A 回答 (5件)

No.2の者です。



何か規則性があるなら、マクロで簡単にできるかと思います。
(ワークシートがどの様なレイアウトなのかとかが、不明なので。)

例えば、A5とC5、A6とC6と、シート1と2で、毎回、行が同じなら、

Dim myRow As Long
myRow = Worksheets("Sheet1").Range("C1").End(xlDown).Row
Worksheets("シート2").Cells(myRow, 1).Value = Worksheets("シート1").Cells(myRow, 1).Value

行数を保存する変数を用意して、データの入っている最下部の行数を取得
シート1のデータを、シート2の同じ行数へ、文字を入れるとか。
    • good
    • 0
この回答へのお礼

何度も申し訳ないです・・・。
いろいろとヒントを得ながら、

ActiveSheet.Paste
ActiveCell.Offset(0, 1).Activate

などを繰り返すことでどうにか解決しました。
丁寧でわかりやすい回答でしたのでベストアンサーにさせていただきます。

ありがとうございました!

お礼日時:2022/08/12 14:50

この場合、


 コピー元の指定

 コピー先の指定
が必要になる。

・・・

なんか、
 ・先にコピー先を指定して
 ・そこでマクロを起動させて、
 ・別のシートの最終行のデータを複製して貼り付けたい。
という感じだろうと推測します。

この場合、
 ・コピー先を変数に保存しておいて、
 ・コピー元の別シートの最終行のセルを指定して、
 ・値をクリップボードに取り込み、
 ・コピー先を保存した変数を使って貼り付け位置を指定して貼り付け。
という手順になりますね。

面倒ですが、特別難しい手順ではありません。
この手順の中のなにが分からないのかを自問自答しながら、インターネット上を検索してみると、自力でマクロを作れるようになりますよ。
    • good
    • 0
この回答へのお礼

やりたいことは大方おっしゃるとおりです。

2日くらいどうにかならないか調べながらやっていたのですが、これだけ時間かけて何もできなければマクロ使わないほうがいいかもと思ってしまったので最後に質問をしたところでした(汗)

お礼日時:2022/08/12 14:45

No.2の者です。



試していないので、エラーが出たら適宜修正して貰いたいですが、下記の
様な感じでどうでしょうか?
シート2のA列には、何か入っていないとエラーになります。
例えば、1行目にタイトルを入れるなどが必要になります。

Worksheets("シート2").Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = Worksheets("シート1").Range("A1").End(xlDown).Value


※ Cells(Rows.Count, 1).End(xlUp).Offset(1)
意味:A列の一番下のセルから、Ctrl + ↑ で、そのセルの1つ下を指定。
    • good
    • 0
この回答へのお礼

ありがとうございます。
先ほど回答いただいたコードでスッキリ見やすくなり、わかりやすかったです!
追加でいただいた回答で本来ならいけると思うのですが、シート2へは途中に入力された項目があり、Cells(Rows.Count, 1).End(xlUp).Offset(1) だとうまくいかないんです(泣)

先ほどの、
Worksheets("シート2").Range("A4").Value = Worksheets("シート1").Range("A1").End(xlDown).Value

のWorksheets("シート2").Range("A4").Value をアクティブなセルに指定したり、選択範囲を指定するようなことはできないのでしょうか?

お礼日時:2022/08/12 11:57

おはようございます。



セルに入っている文字の記載だけでしたら、少し長いですが、下記の様に
1行で書くことも可能です。

Worksheets("シート2").Range("A4").Value = Worksheets("シート1").Range("A1").End(xlDown).Value
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

この Range("A4") 部分は次にA5へ貼り付けしたいときにも対応できるように、固定ではなくどのセルでも対応できるようにできないでしょうか?

お礼日時:2022/08/12 11:18

Range("A3").Select を Range("A4").Select に変更

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

貼り付けしたいセルが変わるたびにマクロを編集するしかないのでしょうか?
Range("A3").Select の部分は毎回変わるので...。

お礼日時:2022/08/12 11:15

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