1つのシートに入力しているデータを別ブックに分割する方法の例です。
目次
例:別ブックに分割する
- 分割の基準:A列・分類
- データは分類順で並んでいない

分割後のエクセルブックです。

分割対象の分類は、別シート「対象」に入力しています。AとBのみ分割したい場合は、AとBのみ入力します。

上記の例は少ないデータ量ですが、実際にあった例ではデータ量が2万行を超えていました。
一気に全データを対象にマクロを実行してはいません。
エクセルの最終行は1,048,576ですが、最終行まで使っているデータを見たことはないし、内容によっては2万行くらいでもメモリ不足になることもあります。
サンプルVBA(マクロ)
変数等は最小限にしています。
Sub sample() Dim wsT As Worksheet '分割対象一覧のシート Dim Lrow As Long '分割対象一覧のシートの最終行 Dim i As Long Dim wsName As String Dim wbName As String Application.ScreenUpdating = False Set wsT = ActiveWorkbook.Sheets("対象") Lrow = wsT.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To Lrow wbName = wsT.Cells(i, 1) Range("A1").AutoFilter 1, wbName wbName = "F:\sample" & "\" & wbName Range("A1").CurrentRegion.Copy Workbooks.Add ActiveSheet.Paste With ActiveWorkbook .SaveAs Filename:=wbName .Close End With Next i ActiveSheet.AutoFilterMode = False Application.ScreenUpdating = False MsgBox "分割しました。" End Sub
シート「一覧」をアクティブにした状態で、マクロを実行します。
