• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルでデータ.xlsから1行毎に元シート.xlsへコピーし1行毎に多数ファイルを作成したい。)

エクセルでデータを元シートへコピーして多数ファイルを作成する方法

このQ&Aのポイント
  • エクセルでデータを元シートへコピーして多数のファイルを作成する方法について教えてください。
  • 手作業で繰り返し作業をするのが疲れて困っています。
  • エクセルマクロを使えば簡単にデータをコピーして多数のファイルを作成できます。具体的な手順を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.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

vba117
質問者

お礼

早速の回答ありがとうございます。 記入間違いまで正しく解釈されて、思い通りの答えでした。 これで作業が楽になります。本当に感謝致します。 ありがとうございました。

関連するQ&A

専門家に質問してみよう