- ベストアンサー
エクセルVBAでフォルダ内の全ファイルをコピペ
- VBAを使用して、エクセルフォルダ内の全ファイルをコピペする方法について教えてください。
- フォルダ内にあるファイルの特定の部分をコピーし、マスターファイルに貼りつけるためのVBAの作成方法を教えてください。
- エクセルVBAを使って、毎回手動で行っているフォルダ内のファイルのコピーペースト作業を自動化する方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>全くの初心者なため、貼り付けるだけで動くようなものをいただけれると大変助かります。 そこまで甘えないことが上達の早道です。 同じような質問が良くありますよ。最近回答した質問ですが http://okwave.jp/qa/q7578876.html http://okwave.jp/qa/q4221547.html を参考にしてみてください。とは云っても少し、説明しておきますと ●あるフォルダ内にあるファイルの形式は全て同じで、10行目まではタイトル欄になっているため、11行目以降の記載がある行だけをマスターとなるファイルにコピペしたいです。 Sheets("Sheet1").Range("A1:J1000").Copy の部分が Sheets("Sheet1").Range("A11:J1000").Copy にすると、11行目からJ1000までに という事になります。 デーやが入っている最終の行を取得する方法はありますが、データを元データの行数がたいしたことなければ 元データが最大1000行までであれば Range("A1:J1000").Copy と指定しても、空白がコピーされるだけですので十分ではあります。 ●マスターも同じく10行目まではタイトル欄なので、11行目以降に、他ファイルの11行目以降の内容をどんどん積み上げていく形式にしたいです。 Range("A65536").End(xlUp).Offset(1, 0).Select がA列の最終の行から上へ検索してデータの入っている行の下を探しています。 ●ファイルの名前は毎回変わるので、フォルダ内の指定されたエクセルファイルのみをコピペ、のような処理にしたいです。 Dir(Sheets("Sheet1").Range("A1").Value & "\*.xls") で指定したフォルダのエクセルファイルを順に取得しています。 ●B列だけは必ず記載がある列なので、そこを参考に11行目から何行目までをコピーすればいいのかを判断できるのかな、と思います。 Range("A65536").End(xlUp).Offset(1, 0).Select を Range("B65536").End(xlUp).Offset(1, 0).Select とするとB列の最終行を取得できます。 *但し、B65536 はエクセル2003以前のヴァージョンの最大65536行なので、この様になっています。 エクセル2007以上であれば、 65536 の値が異なります。 バージョンを問わずという事であれば、最終の行を取得する方法があります。 ●貼り付けが完了したらマスター以外の開いたファイルを全て閉じるところまで自動化できたら有難いです。 Workbooks(buf).Close SaveChanges:=False の部分が、上書き保存せずに 閉じる という事です。 更に検討が必要な部分としては、貼り付けの作業を行った後のファイルをどうするかです。 そのままでは、VBAを実行するたびにデータが追加されますしね。 解決案 コピーが終了したら、ファイルごと削除、ほかのフォルダーへ移動させる。 或いは、 データの部分(11行目以下)を削除して保存していく。 或いは、 VBA実行前に、マスターのデータをクリアして、毎回、全てのファイルのデータを 貼り付ける。 とりあえず、ここまでにしておきます。
お礼
OKWave上でなぜか投稿ができず、お礼が遅れてしまいました。申し訳ありません。丁寧にご説明いただき、ありがとうございました。大変助かります。いただいたVBAを元に、自分でもきちんと勉強するようにしたいと思います。