【Excel VBA】複数ファイルの表をコピーしてまとめてみる

シェアする

マクロを使って複数ファイルの表をまとめてみたくなったので、

マクロを使って複数ファイルの表をまとめてみました。


前回記事

【Excel VBA】別フォルダにある表をコピーしてみる
【Excel VBA】別フォルダにある表をコピーしてみる
マクロを使って指定したフォルダの表をコピーしてみたくなったので、 マクロを使って指定したフォルダの表をコピーしてみました。

前回は1ファイルの読み込み→1ファイルの出力を行いました。

今回はそこから少し修正して発展させます。

VBAでやりたいこと

・指定したフォルダ内にあるファイルの表をすべて取得する

・空白行を含む表を全選択してコピーする

・取得した表を、指定した1つのファイルにまとめる

状況設定

場所 C:\work\vba

inフォルダ:読み取りたいエクセルファイルがあるフォルダ

outフォルダ:書き込みたいエクセルファイル(out.xlsx)を出力するフォルダ

test2.xlsm:マクロを実行するエクセルファイル

inフォルダ内にはファイルが複数存在しています。

これらをすべて読み込みたいです。

入力したいファイルの中身はこちら↑

表内には空白行も含まれています。

空白行も含め、表全体をコピーして一つにまとめたいです。

(※各表の開始位置はB4からで統一されているという設定です。)

入力フォルダ、出力フォルダはエクセルのシート上で指定させます。

出力はout.xlsxの名前で新規作成して保存します。

実装

今回行った実装はこんな感じです。

パーツごとに大まかに説明します。

①指定フォルダ内のすべてのファイルを参照

ループ処理ですべてのファイルを参照しています。

なぜループ処理が入力ファイルの数だけ実行されるかというと、

Dir関数を用いて変数InFilenameの値を取得しているからです。

22行目を実行したとき、引数内のパスの配下に存在するファイル名が1つ返されます。

その後は、引数なしでDir()を実行するたびに、同条件でそれまでに取得されていないファイル名が1つ返される仕組みです。

②空白行を含む表全体をコピー

表全体の選択はCurrentRegionプロパティで可能ですが、表内に空白行があると上手くいきません。

そこで、今回は次のように実装しました。

StartRowは表の開始行、LastRowは表の最終行です。

開始行から最終行までの行をまるごと選択し、出力ファイルに貼り付けるようにしています。

各表の最終行をどのように取得しているかは次の通り。

.End(xlUp)とは、キー操作でいうctrl+↑のこと。

xlLastRow(エクセルの一番下の行)から、2番目(B)の列に対して、ctrl+↑して移動した結果たどり着いた行番号をLastRowに格納しています。

出力ファイルの貼り付け行は、変数PXで制御しています。

表の行数分だけ次の貼り付け位置をずらす形。

結果

出力はこのようになりました。

空白行も含むすべての情報が出力されています。

まつよう
上手くいきました

スポンサーリンク

シェアする

スポンサーリンク