自动过滤使用Excel中所需的唯一值

时间:2014-05-10 13:06:14

标签: 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(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

1 个答案:

答案 0 :(得分:1)

伪代码,抱歉我暂时没有使用过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

通过首先将原始数据存储在Variable类型的数组中,并将各种工作簿的输出存储在Variable类型的数组中,可以高度优化此代码。只有在循环完成后,您才实际创建输出工作簿并将数组中的内容写入工作簿。

这样我们就不需要首先查找唯一值,然后重复应用AutoFilter,这将更慢,更不容易维护。