将单元格区域的数据按照某个字段进行拆分,是一个经常需要遇到的问题。
以下代码利用字典按照任意字段拆分单元格区域的数据,同时将拆分后的数据单独另存为一个excel工作簿。
Sub QQ1722187970() Dim oRng As Range Dim oRngHead As Range Set oRng = Application.InputBox("请选择要拆分的字段名", "拆分", , , , , , 8) Excel.Application.ScreenUpdating = False Excel.Application.DisplayAlerts = False Excel.Application.Calculation = xlCalculationManual If oRng.Columns.Count > 1 Then MsgBox "您未选择或者您选择的拆分字段有误,请重新选择" Else Dim oWK As Worksheet Dim oDic As Object Set oDic = CreateObject("scripting.dictionary") With oRng Set oWK = .Parent iRow = .CurrentRegion.Rows(1).Row iColField = .Column With oWK iRowEnd1 = .Cells(65536, iColField).End(xlUp).Row iColEnd = .Cells(iRow, 256).End(xlToLeft).Column iColStart = .Cells(iRow, iColField).End(xlToLeft).Column iRowEnd2 = .Cells(65536, iColStart).End(xlUp).Row Set oRngHead = .Cells(iRow, iColStart).Resize(1, iColEnd - iColStart + 1) For i = iRow + 1 To Excel.Application.WorksheetFunction.Max(iRowEnd1, iRowEnd2) Dim oRngTemp As Range Set oRngTemp = .Cells(i, iColStart).Resize(1, iColEnd - iColStart + 1) sText = .Cells(i, iColField).Value If Not oDic.Exists(sText) Then oDic.Add sText, oRngTemp Else Set oDic.Item(sText) = Excel.Application.Union(oDic.Item(sText), oRngTemp) End If Next i arrKeys = oDic.keys arrItems = oDic.items For i = 0 To UBound(arrItems) Dim oWB As Workbook Set oWB = Excel.Application.Workbooks.Add With oWB Dim oWK1 As Worksheet Set oWK1 = .Sheets(1) With oWK1 oRngHead.Copy .Range("a1") arrItems(i).Copy .Range("a2") .Columns.AutoFit End With .SaveAs Excel.ThisWorkbook.Path & "\" & arrKeys(i), xlOpenXMLWorkbook .Close End With Next i End With End With End If Excel.Application.Calculation = xlCalculationAutomatic Excel.Application.DisplayAlerts = True Excel.Application.ScreenUpdating = True End Sub
发表评论