🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

Q&A

解決済

1回答

2691閲覧

VBA 別ブックの複数のシートをマクロを実行するブックのシート1にまとめたい。

msys1987

総合スコア2

VBA

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

0グッド

0クリップ

投稿2020/12/01 03:06

別ブックの複数のシートをマクロを実行するブックのシート1にまとめたい。

以下のような流れのマクロを作成しようとしています。
1.マクロ実行
2.別ブック(コピー元のブック)を開く。
3.別ブック(コピー元のブック)のシート1のA2から最終列と最終行までの内容をコピーする。
4.本ブック(マクロを実行するブック)のシート1の最終行の1つ下のセルに値貼り付けする。
5.別ブック(コピー元のブック)のシート2のA2から最終列と最終行までの内容をコピーする。
6.本ブック(マクロを実行するブック)のシート1の最終行の1つ下のセルに値貼り付けする。
あとは別ブック(コピー元のブック)の最終シートまで上記の3-6を繰り返す。

しかし4で以下のエラーが発生します。
実行時エラー 424
オブジェクトが必要です。

どうすればエラーを回避して希望する処理を進められますでしょうか?

コードは以下の通りです。

Sub まとめるマクロ() Dim i As Integer Dim 事業所別コード社員一覧 As String 事業所別コード社員一覧 = Dir("*事業所別コード社員一覧.xls*") Workbooks.Open 事業所別コード社員一覧 For i = 1 To Workbooks(事業所別コード社員一覧).Worksheets.Count Worksheets(1).Range("A2", Range("A2").End(xlToRight).End(xlDown)).Copy ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row.Offset(1, 0).PasteSpecial (xlValues)'ここでエラーが出ます Next End Sub

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

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

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

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

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

guest

回答1

0

ベストアンサー

.Rowが余分ですね。Rowは何行目かという数値ですのでそのエラーになります。
あと、Worksheets(1)Worksheets(i)じゃないですか。

vba

1 Worksheets(i).Range("A2", Range("A2").End(xlToRight).End(xlDown)).Copy 2 ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row.Offset(1, 0).PasteSpecial xlValues

コメントを受けて追記

さらに、Range や Cells の中の Range("A2") や Rows.Count もブック.シートを指定しないと、エラーになりますね。

vba

1 For i = 1 To Workbooks(事業所別コード社員一覧).Worksheets.Count 2 With Workbooks(事業所別コード社員一覧).Sheets(i) 3 .Range("A2", .Range("A2").End(xlToRight).End(xlDown)).Copy 4 End With 5 With ThisWorkbook.Worksheets(1) 6 .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlValues 7 End With 8 Next

ちょっとコードが読みづらくなるので、ここは変数をうまく使うとぐっと読みやすくなります。

vba

1Sub まとめるマクロ() 2 3 Dim 事業所別コード社員一覧 As String 4 事業所別コード社員一覧 = Dir("C:\TEST\test1.xlsm") 5 6 Dim fromWB As Workbook 7 Set fromWB = Workbooks.Open(事業所別コード社員一覧) 8 9 Dim toWS As Worksheet 10 Set toWS = ThisWorkbook.Worksheets(1) 11 12 Dim i As Integer 13 For i = 1 To fromWB.Worksheets.Count 14 fromWB.Sheets(i).Range("A2", fromWB.Sheets(i).Range("A2").End(xlToRight).End(xlDown)).Copy 15 toWS.Cells(toWS.Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlValues 16 Next 17 18End Sub

投稿2020/12/01 03:20

編集2020/12/01 05:44
hatena19

総合スコア34073

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

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

msys1987

2020/12/01 05:03

回答ありがとうございます! おかげさまでエラーが回避できました。 しかし別のエラーが発生しました。 実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。 以下のようにコードを変更しました。 For i = 1 To Workbooks(事業所別コード社員一覧).Worksheets.Count  Workbooks(事業所別コード社員一      覧).Sheets(i).Range("A2",Range("A2").End(xlToRight).End(xlDown)).Copy ’ここでエラーがでます。 ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial (xlValues) Next 別ブック(コピー元のブック)のWorksheets(2)が見つからないのかな?と思い、変数を使わず Workbooks(事業所別コード社員一      覧).Sheets(2).Range("A2",Range("A2").End(xlToRight).End(xlDown)).Copy に変更しましたが、同現象です。 別ブック(コピー元のブック)でSheets(2)をセレクトするマクロを組みましたが、正しく動作しています。 矢継ぎ早で申し訳ありません。ご教授いただけませんでしょうか。
hatena19

2020/12/01 05:45

回答に追記しましたのでご参照ください。
msys1987

2020/12/01 06:11

ありがとうございました。おかげさまで希望する動作のマクロができました。 RangeやRows.Countにもブックの指定が必要なのですね。勉強になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問