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

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

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

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

Q&A

解決済

2回答

1775閲覧

ExcelVBAでフォルダの中のブックを一つにまとめる上で、一つ目のデータの最終行の下に2つ目のデータを貼り付けたい

cjapan35

総合スコア10

VBA

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

0グッド

0クリップ

投稿2019/08/01 05:21

編集2019/09/25 09:05

前提・実現したいこと

Excel VBAでフォルダにまとめてあるいくつかのブックから表を取り出して一つのブックにまとめるというマクロを作りたいです。
ファイルの名前は基本的に統一されています。(区別するために末尾がAやBという違いがあるのみ)
ファイルにはシート1に表を作っていて、それを一つのブックにまとめてずらっと表示させることが目標です。
必要なのはシート1のデータのみで、ほかのシートからはデータはとりません。
表の幅はA~Rまで、行数はブックによって異なります。
マクロブックにボタンを設置しており、それを押すとフォルダ選択画面が開き、フォルダを選択すると処理が実行されるという流れです。
特に条件等はなく、そのまま表まるごと並べていきたいです(2つ目以降は見出し部分はいらない)。

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

実行時エラー'-2147221080(800401a8)': オートメーションエラーです。

というエラーが
" LastRw2 = wbk_new.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row "
のところで表示されます。

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

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

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

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

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

cjapan35

2019/08/01 06:02

当該箇所にactiveと入れてみましたがオートメーションエラーは消えませんでした。
nanami12

2019/08/01 06:36

LastRw2  の 右辺に 数値を入れても おちますか?(最終行)
cjapan35

2019/08/01 06:59

自分の解釈があってるか分かりませんが、LastRw2の右辺を消して1と入れてみたところ、wbk_new.SaveAs (workBookName) の部分が黄色くなり、オートメーションエラーと表示されました。
nanami12

2019/08/01 07:31

つまり、このことから。最終行を代入するぶんには落ちないという切り分けができましたね。 落ちる箇所が変わったので。 素朴な質問ですが、再帰関数内部のループでファイルのopen、集計、保存を行ってないのは なぜでしょう?
Secret

2019/08/01 07:33

そのデバッグ中にworkBookNameの変数の中身を見てください。 ファイル名だけでパスの情報がなかったりしませんか?
cjapan35

2019/08/01 07:36

ありがとうございます。 新規ファイルをループで何度も開くのは処理的にもよくないことかと思ったので外に出して初めに開くようにしています。 ループの方でオープン、集計、保存を行わなければならないのでしょうか?
cjapan35

2019/08/01 08:24

Secretさん workBookName変数の中が空になってました。ここにパスの情報を入れなければならないのですね。 どういった指定をすればいいのでしょうか? nanami12さん すみません、見たのですがあまりわかりませんでした。 VBAを全く学んだことのない状態でこのマクロを作り始めているものでして...
guest

回答2

0

どうもありがとうございます。解決しました。

投稿2019/08/06 07:21

編集2019/09/25 09:04
cjapan35

総合スコア10

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

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

0

ベストアンサー

Call SEARCH_SUB_FOLDER(objFSO.GetFolder(strPATHNAME)) の前で、
wbk_new.Close savechanges:=True があり、「wbk_new」を閉じてしまっていることが
オートメーションエラーの原因のような気がします。

関数内で使用する変数はその関数の引数として渡すべきだと思います。

投稿2019/08/01 13:05

meg_

総合スコア10580

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

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

cjapan35

2019/08/02 00:31

ありがとうございます。 Sub SEARCH_SUB_FOLDERの中でwbk_newを作成、保存、閉じる作業を行ったのですが、今度は LastRw2 = wbk_new.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Rowでオブジェクト変数またはwithブロック変数が設定されていませんとのエラーが出てしまいました。
meg_

2019/08/02 02:03

1.このコード実行時にwbk_newは開いていますか? 2.ここでの「Rows.Count」はどのセル範囲を指しているのでしょうか? 3.1つ上のコードで「LastRw1」は正しく行番号を取れていますか?
cjapan35

2019/08/02 06:20

返信ありがとうございます。 デバッグで見てみると、もともとLastRw1の方では最終行を取得できていたのですが、コード実行時にwbk_newを開いていなかったのがいけなかったみたいです。 その辺修正して、表を二つ並べることができました。 あとは元のブックの表のセル幅を維持して貼り付けたいのですが、貼り付け元でセル幅が均等になってしまいます。 ヘッダーの部分は2つ目の表以降はいらないため、ヘッダー(見出し)だけ先に取り出しておく処理を追加しましたが、ここに書式(セル幅)を維持するための三行目を追加したところ、「1004 range クラスの pastespecial メソッドが失敗しました。」というエラーが出てしまいました。 Sheets(1).Select Rows("1:5").Copy Destination:=wbk_new.Sheets(1).Cells(1, 1) wkst.Rows(j).PasteSpecial たびたび申し訳ありませんが、助言いただけませんでしょうか。
meg_

2019/08/02 07:20

列幅の張り付けは下記で出来ると思います。 PasteSpecial Paste:=xlPasteColumnWidths
cjapan35

2019/08/06 07:17

ありがとうございます。返信遅くなりまして申し訳ありません。 結果的に Sheets(1).Select Rows("1:5").Copy With wbk_new.Sheets(1).Cells(1, 1) .PasteSpecial .PasteSpecial xlPasteColumnWidths End With このコードで見出しだけ抜出すことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問