对于Array上的每个循环来返回每个唯一string的计数

我想要实现的是返回一列中的唯一值(string)。 把这个列表放到一个数组中,然后将这个值列表粘贴到一个新的表格中,例如列A中。然后,对于每个数组元素,计算它发生原始列表的次数,并返回新列表中列B中的频率计数其独特的string。

这是我的代码到目前为止。

Sub UniqueList() Dim rListPaste As Range Dim causeList As Range Dim iReply As Integer Dim element As Variant On Error Resume Next Set rListPaste = Application.InputBox _ (Prompt:="Please select the destination cell", Type:=8) If rListPaste Is Nothing Then iReply = MsgBox("No range nominated," _ & " terminate", vbYesNo + vbQuestion) If iReply = vbYes Then Exit Sub End If causeList = Range("E1", Range("E65536").End(xlUp)) Range("causeList").AdvancedFilter Action:=xlFilterCopy, Unique:=True Range("causeList").AdvancedFilter CopyToRange:=causeList.Cells(1, 1) element = 0 For Each element In causeList element = element + 1 Next element End End Sub 

有多种方法可以实现您要查找的内容:

1.使用数据透视表:

只需为您的数据范围插入数据透视表。 删除你感兴趣的字段(列名),在行字段和数据字段中。 你会看到一个独特的项目列表和旁边的计数。 如果数据更改,则需要刷新数据透视表

2.创build唯一值列表并添加COUNTIF公式首先,将高级筛选应用于您的列(数据 – >筛选 – >高级)。 在这里,select“复制到其他位置”,select您的数据范围(如“列表范围”),您的目的地(“复制到”),并选中“唯一值”。 现在使用该唯一列表,在下一列中添加一个COUNTIF公式。

3. VBA

以下代码将输出唯一值列表及其频率。 您需要添加对“Microsoft Scripting Library”的引用,因为它使用Dictionary对象:

 Sub CountUnique(rngInput As Range,rngTarget As Range)

    昏暗的d作为新的词典
     Dim varCell As Variant
     Dim varKey As Variant
    昏暗rngOut作为范围
    对于rngInput中的每个varCell
        如果不是d.Exists(varCell.Value)那么
             d.Add varCell.Value,0&
        万一
         d(varCell.Value)= d(varCell.Value)+ 1
    下一个

    设置rngOut = rngTarget(1,1)
    对于每个varKey在d.Keys中
         rngOut.Value = varKey
         rngOut.Offset(,1)= d(varKey)
        设置rngOut = rngOut.Offset(1)
    下一个

结束小组