- ベストアンサー
【VBA】複数のブックを1つのシートにまとめる
- あるフォルダ内に複数のブックが入っており、新しいブックに1シートでまとめる方法を教えてください。
- マクロを使用して、複数のブックを1つのシートにまとめることができます。
- ただし、結合されたリストが飛び飛びになる場合があるので、原因を調べる必要があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 既存4シート→4シートを各シートごとで結合 色々やりかたはあると思いますが、元のコードの For cnt = 1 To 4 Set Ws1 = NewFile.Worksheets(cnt) Set Ws2 = Wb.Worksheets(cnt) R = Ws1.Cells(Rows.Count, 1).End(xlUp).Row + 1 With Ws2 End With Next の部分とその下の部分 Ws2.Range("A17", Ws2.Cells(Rows.Count, 3).End(xlUp)).Resize(, 20).Copy R If R.Offset(1).Value = "" Then Set R = R.Offset(1) Else Set R = R.End(xlDown).Offset(1) End If とを一部変更して合成します。 For cnt = 1 To 4 Set Ws1 = NewFile.Worksheets(cnt) Set Ws2 = Wb.Worksheets(cnt) 'A17行目からコピーして結合する(→本当はA17行目~K列までを反映したい) If Ws1.Cells(Rows.Count, 1).End(xlUp).Row < 17 Then Set R = Ws1.Range("A17") Else Set R = Ws1.Cells(Rows.Count, 1).End(xlUp).Offset(1) End If Ws2.Range("A17", Ws2.Cells(Rows.Count, 3).End(xlUp)).Resize(, 20).Copy R Set Ws1 = Nothing: Set Ws2 = Nothing Next > これを開かないようにすることはできますでしょうか? 以下のサイトを参考にしてください。 ブックを開かずにセル値を取得 https://excel-ubara.com/excelvba5/EXCELVBA242.html ブックを開かないでセルのデータを読む http://officetanaka.net/excel/vba/tips/tips28.htm なお、余計な事だとは思いますが、変数宣言のないものがあったので、オプションで「変数の宣言を強制する」にしておいた方がいいと思います。
その他の回答 (2)
- kkkkkm
- ベストアンサー率66% (1719/2589)
あと If R.Offset(1).Value = "" Then Set R = R.Offset(1) Else Set R = R.End(xlDown).Offset(1) End If ですが、コピーしたデータのA列の途中に空白があった場合そこから下は次回上書きされてしまいますが、空白がある可能性があるのでしたら以下のようにしておくといいのではないかと思います。 Set R = NewFile.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1) あくまで、シート1にばかり既存のシート4をコピーしていくという事だとしたらですが。
補足
ご丁寧に記載くださりありがとうございます・・!! 教えていただいたコードに修正しましたらちゃんと起動しました!! 大変助かります。 ご質問に補足すると、既存のシート4をコピーというわけでなく、あくまで「既存シート1を新規ブックシート1に全て結合」と想定しております。 また、重ねて恐縮なのですが。。 (1)こちらのコードで実行すると、結合されたブックとは別にファイルに格納されている既存ブックが全て開かれて表示されます。 これを開かないようにすることはできますでしょうか?(結合ブックのみを表示) (2)今回は1シートの結合で作成してみましたが、4シート全て同じ動作をさせるとなると、難易度が高くなりまでしょうか? 既存4シート→4シートを各シートごとで結合 なかなか同じようなサンプルが検索しても見当たらなかったので。。
- kkkkkm
- ベストアンサー率66% (1719/2589)
Ws2.Range("A17", Ws2.Cells(Rows.Count, 3).End(xlUp)).Resize(, 20).Copy R この時点でWs2はWb.Worksheets(4)なのでシート(4)のデータをコピーしてると思いますが、とびとびとはどのような状態でコピーされているのでしょう。 ここは4回ループしてますが For cnt = 1 To 4 Set Ws1 = NewFile.Worksheets(cnt) Set Ws2 = Wb.Worksheets(cnt) R = Ws1.Cells(Rows.Count, 1).End(xlUp).Row + 1 With Ws2 End With Next ループを抜けて設定されるのは Set Ws1 = NewFile.Worksheets(4) Set Ws2 = Wb.Worksheets(4) R = Ws1.Cells(Rows.Count, 1).End(xlUp).Row + 1 だけのような気がします。 R.Valueもそのすぐ後に上書きされてるようですが…。
お礼
まさにやりたいことができました・・・!! 感謝しきれません。。 色々と教えて下さってありがとうございます。 今後も自分で組めるように学んでいこうと思います。 本当にありがとうございました。