'好的,以下是将上述代码中使用的字典(
网页链接 )替换为 Collection 集合来实现按"U"列拆分工资表为多个新工作簿的 VBA 代码:
'
'VBA
Sub SplitByColumnUToWorkbooks()
Dim lastRow As Long
Dim i As Long
Dim ws As Worksheet
Dim colUnique As New Collection
Dim uniqueValue As Variant
Dim newWb As Workbook
Dim newWs As Worksheet
Dim sourceSheetName As String
Dim isDuplicate As Boolean
Set ws = ThisWorkbook.Worksheets(1) '假设工资表在工作簿的第一个工作表,可根据实际情况修改
sourceSheetName =
网页链接 lastRow = ws.Cells(Rows.Count, "U").End(xlUp).Row '获取"U"列最后一个有数据的行号
'遍历"U"列,提取唯一值并存入 Collection 集合
For i = 2 To lastRow '假设第一行是表头
isDuplicate = False
uniqueValue = ws.Cells(i, "U").Value
On Error Resume Next
网页链接 uniqueValue, CStr(uniqueValue)
If
网页链接 <> 0 Then
isDuplicate = True
End If
On Error GoTo 0
' If Not isDuplicate Then
'
网页链接 uniqueValue, CStr(uniqueValue)
' End If
Next i
'为每个唯一值创建新工作簿并复制数据
For Each uniqueValue In colUnique
Set newWb =
网页链接 '创建新工作簿
Set newWs = newWb.Worksheets(1) '新工作簿的第一个工作表
网页链接 = uniqueValue
ws.Rows(1).Copy newWs.Rows(1) '复制表头
For i = 2 To lastRow
If ws.Cells(i, "U").Value = uniqueValue Then
ws.Rows(i).Copy newWs.Rows(newWs.Cells(Rows.Count, 1).End(xlUp).Row + 1)
End If
Next i
'保存新工作簿(这里假设保存在当前文件夹下,可根据需要修改保存路径)
网页链接 网页链接 & "\" & uniqueValue & ".xlsx"
网页链接 Next uniqueValue
'以下代码可选,用于删除原工作表,若不需要删除可注释掉
网页链接 = False
' ThisWorkbook.Worksheets(sourceSheetName).Delete '没事不要乱删除原始表
网页链接 = True
End Sub
'Print
'
'代码说明:
'
'1. 声明并创建了一个 Collection 对象 colUnique 用于存储"U"列中的唯一值
'2. 在遍历"U"列数据时,通过 On Error Resume Next 来尝试将每个值添加到 colUnique 集合中 如果添加时出现错误(即
网页链接 <> 0 ),则说明该值是重复值,将 isDupli