- ベストアンサー
エクセルでデータを元シートへコピーして多数ファイルを作成する方法
- エクセルでデータを元シートへコピーして多数のファイルを作成する方法について教えてください。
- 手作業で繰り返し作業をするのが疲れて困っています。
- エクセルマクロを使えば簡単にデータをコピーして多数のファイルを作成できます。具体的な手順を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
丸投げに当るので、原型のみです。 上の例のtest_2.xlsのA1セルはtestが正しいと解釈して作成しています。 その他不明な部分は適当に仮定しています。(原型なので問題ないでしょう。) ・データの整合性等のチェックは一切省いていますので、実際の使用では各種のチェックを入れておかないと即エラーになります。(データが想定と違う場合) ・変数の宣言は省略して名前のみにしてありますが、実際はタイプを指定しておいたほうが良いでしょう。 ・元シート.xlsおよび作成されるファイルは同じフォルダにあるものとしています。 ・データ.xlsからのコピーはコピーメソッドで行っていますので、書式などもそのままコピーされます。 (もし式が入力されている場合は、参照がおかしくなることがあり得ます) ・元データのデータ有無に関わらず、データシートのデータを上書きするようにしています。 データ.xlsがアクティブな状態で実行されるものと仮定しています。 (シート名、ブック名などは仮設定です) 適宜、修正してご使用ください。 Sub test() Dim dst_name, mbk_name, mst_name, bk_name, b_name Dim dst, mbk, mst Dim ad, p, i, j p = ThisWorkbook.Path & "\" '// 対象となるフォルダのパス+"\" dst_name = "データシート" '// 対象データのあるデータ.xlsのシート名 mbk_name = "元シート.xls" '// 元シート.xlsのファイル名 mst_name = "元シート" '// 元シート.xlsの対象とすべきシート名 Set dst = Sheets(dst_name) For i = 2 To dst.Cells(dst.Rows.Count, 1).End(xlUp).Row '// 作成するファイル名をチェック b_name = dst.Cells(i, 1) If b_name <> "" Then j = 1 bk_name = p & b_name & ".xls" While Dir(bk_name) <> "" j = j + 1 bk_name = p & b_name & "_" & Format(j, "#") & ".xls" Wend '// データをコピー、保存 Workbooks.Open p & mbk_name Set mbk = ActiveWorkbook Set mst = mbk.Sheets(mst_name) For j = 1 To dst.Cells(i, dst.Columns.Count).End(xlToLeft).Column dst.Cells(i, j).Copy (mst.Range(dst.Cells(1, j).Text)) Next j mbk.SaveAs (bk_name) mbk.Close End If Next i End Sub
お礼
早速の回答ありがとうございます。 記入間違いまで正しく解釈されて、思い通りの答えでした。 これで作業が楽になります。本当に感謝致します。 ありがとうございました。