dポイントプレゼントキャンペーン実施中!

同じシート内のE:F、I:K、M:O列の見出し以外のデータをコピーして、結合して、A:C列に貼り付けたいです。
エクセルマクロを教えてください。

「エクセルで複数セル範囲をコピペするマクロ」の質問画像

A 回答 (7件)

#6です。


>また、A1にE1:G3を出力した後に、自動で最終行を認識し、その下に次のデータを足していく方法はありますか?
あれば、教えてほしいです。

それぞれの表をテーブル化しておけば大丈夫です。
A1セルに
=VSTACK(さんま,はまち,たまご)
    • good
    • 0

マクロの練習ですか?


365なら、マクロでなくとも関数で即終了ですが。
参考図なら、
A1セルに
=VSTACK(E2:G4,I2:K4,M2:O4)
でご希望通りの表ができますよ。
    • good
    • 0

>E:F、I:K、M:O列は可変です。


>E1:G4とかE1:G5とかのように1つのブロックが3行ではなく4行以上になることもあります。

ブロックは3ブロック固定で、各ブロックの最下行が変わると理解しました。以下のようになります。

Public Sub セルコピー()
Dim bx As Long 'ブロックの繰り返し
Dim bcol As Long 'ブロックの開始列
Dim lastrow As Long '各ブロックの最終行
Dim srow As Long '各ブロックの行番号
Dim trow As Long 'コピー先の行番号
bcol = 5 '5列から開始
trow = 1 '1行から開始
'3ブロック分繰り返す
For bx = 1 To 3
lastrow = Cells(rows.count, bcol).End(xlUp).Row 'ブロックの最終行取得
'1行~最終行まで繰り返す
For srow = 1 To lastrow
'1行ずつ転記(3列まとめて)
Cells(trow, 1).Resize(1, 3).Value = Cells(srow, bcol).Resize(1, 3).Value
'次の行に移動する
trow = trow + 1
Next
'次のブロックに移動する
bcol = bcol + 4
Next
End Sub
    • good
    • 0

>A1にE1:G3を出力した後に、自動で最終行を認識し、その下に次のデータを足していく方法はありますか?



以下は、最下行を取得するマクロです。
A1にE1:G3を出力した後に
lastrow = Cells(rows.count, "A").End(xlUp).Row
を実行するとlastrowに3が設定されます。
従ってlastrow+1の行に次のデータを足していくことができます。

Public Sub 最下行取得()
Dim lastrow As Long
lastrow = Cells(rows.count, "A").End(xlUp).Row
MsgBox (lastrow)
End Sub

上記が最終行を求める方法ですが、
あなたが、自動で最終行を求めることを質問されたのは、コピー元が
提示された状態(E1:G3,I1:K3,M1:O3)ではなく、実際には可変だからではないでしょうか。
もし、そうだとすると、コピー元は、どのように可変なのでしょうか。
E1:G4とかE1:G5とかのように1つのブロックが3行ではなく4行以上になるということでしょうか。
それとも、E1:G3,I1:K3,M1:O3のあとにQ1:S3のように4つ以上のブロックがあるということでしょうか。
    • good
    • 0
この回答へのお礼

E:F、I:K、M:O列は可変です。
E1:G4とかE1:G5とかのように1つのブロックが3行ではなく4行以上になることもあります。
説明が足りなくて申し訳ございません。

お礼日時:2023/05/17 14:22

よこからですが・・・



延々と質問が繰り返されるパターンですね。

>自動で最終行を認識し~~
検索してみることも考えましょう。
https://excel-ubara.com/excelvba1/EXCELVBA318.html
    • good
    • 0
この回答へのお礼

ご意見、ありがとうございます。
マクロはあんまり使うことがなくて、勉強していきたいと思っていますが、どこから着手したらいいのかも分からなくて。。。。。。
悩んでいました。

お礼日時:2023/05/17 14:22

マクロの記録でつくれます。


以下は、マクロの記録で作成したマクロです。

Sub Macro1()
'
' Macro1 Macro
'

'
Range("E1:G3").Select
Selection.Copy
Range("A1").Select
ActiveSheet.Paste
Range("I1:K3").Select
Application.CutCopyMode = False
Selection.Copy
Range("A4").Select
ActiveSheet.Paste
Range("M1:O3").Select
Application.CutCopyMode = False
Selection.Copy
Range("A7").Select
ActiveSheet.Paste
End Sub
    • good
    • 0
この回答へのお礼

ご教示頂き、ありがとうございます。
上手く行きました。

また、A1にE1:G3を出力した後に、自動で最終行を認識し、その下に次のデータを足していく方法はありますか?
あれば、教えてほしいです。

お礼日時:2023/05/17 11:35

これは簡単なマクロですので、一度挑戦してみましょう。


そしてマクロをつくって動かなければソースを貼り付けて相談して下さい。
VBAのスキルがないと、マクロをつくっても後のメンテナンスが大変ですよ。

それに、ここはマクロの作成を請け負う質問箱ではありませんので。
    • good
    • 0

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