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

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

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

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

Q&A

解決済

1回答

1116閲覧

VBA:2枚目以降のシートを一枚のシートにまとめたいです

aaaskw123123

総合スコア13

VBA

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

0グッド

0クリップ

投稿2021/09/30 06:53

編集2021/09/30 06:58

前提・実現したいこと

2枚目シート以降を一枚のシートにまとめたいです。
今作成しているコードは全部のシートをひとつにまとめる処理になっています。

該当のソースコード

Sub test() 'シート名Aに本部部分のシートを一つにまとめる Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "A" 'すべてのシートで処理 Dim w As Worksheet For Each w In Worksheets 'ただし、シート名が「A」を除く If w.Name <> "A" Then 'コピーする各シートのデータで最も下にあるデータの行を探す(A列にデータがあることが前提) Dim From_Max_Row As Long From_Max_Row = w.Range("a" & Rows.Count).End(xlUp).Row '貼り付け先のシート「A」で最も下にあるデータの行を探す Dim To_Max_Row As Long To_Max_Row = Worksheets("A").Range("a" & Rows.Count).End(xlUp).Row '各シートのデータを1行目からすべてコピーし、「A」に貼り付けていく w.Rows("1:" & From_Max_Row).Copy Worksheets("A").Range("a" & To_Max_Row) End If Next End Sub

試したこと

For文で2枚目以降のシートを選択というコードをいれたのですがエラーがでてしまいます。

発生している問題・エラーメッセージ

オブジェクト変数またはWithブロック変数が設定されていません
Sub test() 'シート名Aに本部部分のシートを一つにまとめる Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "A" '2枚目以降のシートを選択 Dim w As Worksheet Dim i As Long '繰り返し処理 For i = 2 To Worksheets.Count Worksheets(i).Select 'ただし、シート名が「A」を除く If w.Name <> "A" Then 'コピーする各シートのデータで最も下にあるデータの行を探す(A列にデータがあることが前提) Dim From_Max_Row As Long From_Max_Row = w.Range("a" & Rows.Count).End(xlUp).Row '貼り付け先のシート「A」で最も下にあるデータの行を探す Dim To_Max_Row As Long To_Max_Row = Worksheets("A").Range("a" & Rows.Count).End(xlUp).Row '各シートのデータを1行目からすべてコピーし、「A」に貼り付けていく w.Rows("1:" & From_Max_Row).Copy Worksheets("A").Range("a" & To_Max_Row) End If Next End Sub

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初のFor Each のコードのIf文の部分を下記のように修正すればいいでしょう。
Indexで何番目のシートか分かります。

vba

1'前略 2 3 'すべてのシートで処理 4 Dim w As Worksheet 5 For Each w In Worksheets 6 7 'ただし、1番目のシートとシート名が「A」を除く 8 If w.Index = 1 Or w.Name <> "A" Then 9 10'後略

後者のコードを修正するなら、下記で。

vba

1'前略 2 3 '繰り返し処理 4 For i = 2 To Worksheets.Count 5 6 ' Worksheets(i).Select 不要 7 Set w = Worksheets(i) 8 9 'ただし、シート名が「A」を除く 10 If w.Name <> "A" Then 11 12'後略

投稿2021/09/30 07:24

編集2021/09/30 07:30
hatena19

総合スコア34075

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

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

aaaskw123123

2021/09/30 08:45

ありがとうございます。思い通りに動きました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問