ファイル分割
目次
コード
Sub ファイル分割メイン()
'定義
Dim cnt As Integer '処理件数用
Dim rngList As Range, myRng As Range 'フィルタ用
Dim maxRows As Long, lastGyou As Long 'コピー範囲の最終行
Dim filterRetu As Integer, filterGyou As Long 'フィルタ条件列・行
Dim insStrMae As String, insStrUshiro As String 'ファイル名挿入文字列
Dim fileNo As String 'ファイル名挿入文字列
Dim newWB As Workbook
Dim tgtFolder As String '出力先フォルダ
Call 前処理
'セットアップ(出力フォルダ・フィルタ条件列 等)
tgtFolder = フォルダ作成()
With ThisWorkbook.Sheets(menuSheet)
.Range("F5").Value = tgtFolder
.Hyperlinks.Add anchor:=Range("F5"), Address:=Range("F5").Value
filterRetu = .Range("G8").Value
filterGyou = .Range("G9").Value
insStrMae = .Range("G10").Value
insStrUshiro = .Range("G11").Value
End With
'分割条件リストのセットアップ
With ThisWorkbook.Sheets(listSheet)
Set rngList = .Range(.Cells(2, 2), .Cells(2, 2).End(xlDown))
End With
'分割メイン処理
cnt = 0
For Each myRng In rngList
Application.StatusBar = myRng & "ファイルを処理中"
ThisWorkbook.Sheets(syoriSheet).Select
Cells(filterGyou, 1).AutoFilter
Cells(filterGyou, 1).AutoFilter field:=filterRetu, Criteria1:=myRng
lastGyou = Cells(Rows().Count, filterRetu).End(xlUp).Row 'フィルタ条件列目の最終行を取得
If lastGyou <= filterGyou Then GoTo nextRng '絞り込みゼロのときスキップ
Rows("1:" & lastGyou).Copy
Set newWB = Workbooks.Add
Range("A1").PasteSpecial Paste:=xlPasteFormats
Range("A1").PasteSpecial Paste:=xlPasteValues
fileNo = Format(NO取得(myRng), "00") '条件からNOを取得
newWB.SaveAs fileName:=tgtFolder & insStrMae & fileNo & "_" & myRng & insStrUshiro & ".xlsx"
newWB.Close
cnt = cnt + 1
nextRng:
Next myRng
Call 後処理
Application.StatusBar = False
ThisWorkbook.Sheets(menuSheet).Select
MsgBox cnt & "件の処理が完了しました", vbInformation, "完了"
End Sub
解説
【説明】
設定したフィルタ条件列・フィルタ行をもとに、処理シートにオートフィルタをかけ、その結果を新規ブックに保存。
ツール
サンプルデータ出典
東京都の統計