使用Excel中所需的唯一值进行自动筛选

使用Excel中所需的唯一值进行自动筛选,excel,vba,Excel,Vba,下面的代码从F列获取唯一联系人列表,然后在即时窗口中输出这些联系人 如何使用创建的数据对数据运行一系列自动筛选(即在for循环中,一次一个)。在每个自动筛选之间,数据将被复制并保存到新的电子表格中 Sub GetPrimaryContacts() Dim Col As New Collection Dim itm Dim i As Long Dim CellVell As Variant 'Get last row value LastRow = Cells.SpecialCells(xlC

下面的代码从F列获取唯一联系人列表,然后在即时窗口中输出这些联系人

如何使用创建的数据对数据运行一系列自动筛选(即在for循环中,一次一个)。在每个自动筛选之间,数据将被复制并保存到新的电子表格中

Sub GetPrimaryContacts()

Dim Col As New Collection
Dim itm
Dim i As Long
Dim CellVell As Variant

'Get last row value
LastRow = Cells.SpecialCells(xlCellTypeLastCell).Row

'Loop between all rows to get unique values
For i = 3 To LastRow
    CellVal = Sheets("Master").Range("F" & i).Value
    On Error Resume Next
    Col.Add CellVal, Chr(34) & CellVal & Chr(34)
    On Error GoTo 0
Next i

For Each itm In Col
    Debug.Print itm
Next

End Sub

伪代码,很抱歉,我已经有一段时间没有使用VBA了:

dictionary as Dictionary

for each row in sheet
  attribute = Cell(A,1)
  if (attribute not in dictionary) then
    dictionary.put(attribute, newWorkbook)
  end if
  workbook = dictionary.get(attribute)
  'copy row to workbook
end for
通过首先将原始数据存储在类型变量数组中,并将不同工作簿的输出存储在类型变量数组中,可以对该代码进行高度优化。只有循环完成后,您才能实际创建输出工作簿,并将数组中的内容写入工作簿


这样,我们就不需要先查找唯一值,然后重复应用自动筛选,这将大大降低速度,也不容易维护。

为什么要“运行一系列自动筛选”?用户只能看到上一次自动筛选操作的结果?@cmmi-在每个自动筛选之间,数据将被复制并保存到一个新的电子表格中。因此,您实际上想将每个唯一属性的行复制到一个单独的工作表中?一个单独的新工作表或每个值的新工作表???@cmmi-一个单独的excel文档保存到用户的C:\drive中我不太确定如何实现此解决方案-您能告诉我任何引用的方向?@jmb Resources:,