質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

3回答

2729閲覧

VBA:複数シートを一枚のシートにまとめる

pomiw0000

総合スコア19

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/11/10 03:05

前提・実現したいこと

複数シートのデータを一枚のシートにまとめたいです。

シートの並びとしては、
結合シート➔Sheet1➔Sheet2➔Sheet3
となっていて、
Sheet1,Sheet2,Sheet3のデータを結合シートにまとめたいです。

ちなみにSheet1Sheet3のデータは全部同じ形式で、見出しも入っています。
以下のコードですと、見出しも含まれて結合してしまうので
Sheet2からは見出しなし(2行目
転記)したいです。

ちなみに、結合シートの7行目から貼り付けていきたいです。

該当のソースコード

Sub test() 'すべてのシートで処理 Dim i As Long Dim w As Worksheet For i = 2 To Worksheets.count Set w = Worksheets(i) 'ただし、シート名が「結合シート」を除く If w.Name <> "結合シート" Then 'コピーする各シートのデータで最も下にあるデータの行を探す(A列にデータがあることが前提) Dim From_Max_Row As Long From_Max_Row = w.Range("a" & Rows.count).End(xlUp).Row '貼り付け先のシート「結合シート」で最も下にあるデータの行を探す Dim To_Max_Row As Long To_Max_Row = Worksheets("結合シート").Range("a" & Rows.count).End(xlUp).Row + 1 '各シートのデータを1行目からすべてコピーし、「結合シート」に貼り付けていく w.Rows("1:" & From_Max_Row).Copy Worksheets("結合シート").Range("a" & To_Max_Row) End If Next Worksheets("結合シート").Rows(1).Delete End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

見出しだけ先にコピーしておいて、Sheet1~Sheet3のデータを2行目からコピーする感じでどうですか?

VBA

1Sub test() 2 Dim k As Worksheet, w As Worksheet 3 Set k = Worksheets("結合シート") 4 For Each w In Worksheets 5 If w.Name <> k.Name Then 6 w.Rows(1).Copy k.Rows(7) 7 Dim f As Range, t As Range 8 Set f = w.UsedRange.Resize(w.UsedRange.Rows.Count - 1).Offset(1) 9 Set t = k.Range("A" & k.Rows.Count).End(xlUp).Offset(1) 10 Debug.Print f.Address(, , , True), t.Address(, , , True) 11 f.Copy t 12 End If 13 Next 14End Sub

投稿2021/11/10 03:44

編集2021/11/10 07:33
jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pomiw0000

2021/11/10 05:37

ありがとうございます!! 一旦やってみようと思います。
pomiw0000

2021/11/10 07:00

それ以降を8行目から貼り付けたい場合はどうすればいいでしょうか。
jinoji

2021/11/10 07:01

それ以降とは?
pomiw0000

2021/11/10 07:08

見出し以外のデータです。
jinoji

2021/11/10 07:12

w.UsedRange.Resize(w.UsedRange.Rows.Count - 1).Offset(1) が見出し以降のデータで k.Range("A" & k.Rows.Count).End(xlUp).Offset(1)が8行目となるはずですが、そうなりませんか?
pomiw0000

2021/11/10 07:21

8行目からではなく、なぜかものすごい下の行に見出しありでデータが入ってしまっています。
pomiw0000

2021/11/10 07:25

7行目には見出しだけが入っています
jinoji

2021/11/10 07:34

コピー元とコピー先のアドレスを確かめるためにDebug文を入れてみました。 これを実行するとどうなりますか?
pomiw0000

2021/11/10 08:59

今度は見出しだけが貼り付けられてデータはない状態です????
jinoji

2021/11/10 09:02

イミディエイトウィンドウに、コピー元とコピー先のアドレスが書き出されているはずですので、 それを確認してみてください。
guest

0

元のコードに加筆してみました。
Sheet1とSheet2以降のコピー開始位置を変えれば綺麗にまとめることができます。

VBA

1Sub test() 2 3 'すべてのシートで処理 4 Dim i As Long 5 Dim w As Worksheet 6 7 For i = 2 To Worksheets.Count 8 9 Set w = Worksheets(i) 10 11 'ただし、シート名が「結合シート」を除く 12 If w.Name <> "結合シート" Then 13 14 'コピーする各シートのデータで最も下にあるデータの行を探す(A列にデータがあることが前提) 15 Dim From_Max_Row As Long 16 From_Max_Row = w.Range("a" & Rows.Count).End(xlUp).Row 17 18 '貼り付け先のシート「結合シート」で最も下にあるデータの行を探す 19 Dim To_Max_Row As Long 20 21 If i = 2 Then 22 'Sheet1は見出しが設定されていないため最終行=1とする 23 To_Max_Row = 1 24 '各シートのデータを1行目からすべてコピーし、「結合シート」に貼り付けていく 25 w.Rows("1:" & From_Max_Row).Copy Worksheets("結合シート").Range("a" & To_Max_Row) 26 27 Else 28 'Sheet2以降の処理 29 To_Max_Row = Worksheets("結合シート").Range("a" & Rows.Count).End(xlUp).Row + 1 30 '各シートのデータを2行目からすべてコピーし、「結合シート」に貼り付けていく 31 w.Rows("2:" & From_Max_Row).Copy Worksheets("結合シート").Range("a" & To_Max_Row) 32 33 End If 34 35 End If 36 37 Next 38 39 Worksheets("結合シート").Rows(1).Delete 40 41End Sub

投稿2021/11/13 14:50

umeyalabo

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一例です。
※7行目から転記するように修正しました。

vba

1Sub test2() 2 Dim wMerge As Worksheet 3 Set wMerge = Worksheets("結合シート") 4 5 Dim newRng As Range 6 Set newRng = wMerge.Range("A7") 7 8 Dim w As Worksheet 9 For Each w In Worksheets 10 If w.Name <> wMerge.Name Then 11 Dim offsetRow As Long 12 With w.Cells(1).CurrentRegion 13 .Offset(offsetRow).Copy newRng 14 Set newRng = newRng.Offset(.Rows.Count - offsetRow) 15 End With 16 If offsetRow = 0 Then offsetRow = 1 17 End If 18 Next 19End Sub

投稿2021/11/10 04:34

編集2021/11/10 05:21
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pomiw0000

2021/11/10 05:04

ありがとうございます!! ちなみに、結合シートに貼り付ける際に7行目から貼り付けたい場合はどうすればいいでしょうか。
hatena19

2021/11/10 05:06

6行目は空欄ですか。それとも何か入力されてますか。
hatena19

2021/11/10 05:22

空欄でも入力されていてもOKなコードに修正しましたので、回答を参照ください。
pomiw0000

2021/11/10 05:36

ありがとうございます。 7行目からコピーはできたのですが、連続でデータが表示されずに 何行か下の行に表示されてしまいます。????
pomiw0000

2021/11/10 07:08

データとデータの間になぜか、空欄のセルの行がたくさんできてしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問