计算列中的唯一数据,然后将其与另一个唯一数据进行匹配

时间:2016-06-24 06:04:10

标签: excel excel-vba sorting format vba

这是一个令人尴尬的简单问题,但我无法找到解决问题的方法,也无法通过在线搜索找到想法。

假设我在Excel表格中有以下数据(实际数据可能是数千或数百万)(表1):

Name    No. ID
A       A1
B       B4
B       B5
C       C0
D       -
A       A1
A       A2
E       -
F       -
C       C0
B       B5
B       B5
B       B5
B       B6
A       A1
A       A1
A       A2
B       B3
B       B3
B       B3

上面列号ID中的字符( - )也可以是数字0或空白单元格。

我想格式化上述数据如下(表2)

Name    Number of ID
A       2
B       4
C       1
D       0
E       0
F       0

这意味着A具有2个ID(A1和A2),B具有4个ID(B1,B2,B3和B4),C具有1个ID(C0),并且D,E和F没有ID。

使用数据透视表可以获得的最佳效果就像这样

enter image description here

如何在MS Excel中执行表2之类的任务?如果可能的话,可以使用VBA脚本。

2 个答案:

答案 0 :(得分:3)

将列A复制到另一个未使用的列并执行数据►删除重复项命令然后对其进行排序。很少有公式能够有效地处理数千行数据,而且几乎没有公式可以工作。

对其旁边的B列执行相同操作。不要扩展删除重复项所要求的选择。

接下来,在您刚创建的未重复的A列数据旁边的列中使用以下公式:

this.dispose = this.viewFactory.insert(this.element, this.viewHtml, viewModel);

填写无重复数据的范围。我假设您使用E列创建了第一个未重复的数据集,并使用了第F列F列。

helper12count

答案 1 :(得分:1)

如果有人对上述问题的VBA解决方案感兴趣:

Sub GetUniquesCount()
    Dim dict1 As Object, dict2 As Object
    Dim c1 As Variant, c2 As Variant
    Dim i As Long, lastRow As Long, count As Long

    Set dict1 = CreateObject("Scripting.Dictionary")
    Set dict2 = CreateObject("Scripting.Dictionary")

    lastRow = Cells(Rows.count, "A").End(xlUp).Row
    c1 = Range("A2:A" & lastRow)
    For i = 1 To UBound(c1, 1)
        dict1(c1(i, 1)) = 1
    Next i
    Range("D2").Resize(dict1.count) = Application.Transpose(dict1.keys)

    lastRow = Cells(Rows.count, "B").End(xlUp).Row
    c2 = Range("B2:B" & lastRow)
    For i = 1 To UBound(c2, 1)
        dict2(c2(i, 1)) = 1
    Next i

    For Each cel In Range("D2:D" & Cells(Rows.count, "D").End(xlUp).Row)
        count = 0
        For Each k2 In dict2.keys
            If k2 Like cel.Value & "*" Then
                count = count + 1
            End If
        Next k2
        cel.Offset(0, 1).Value = count
    Next cel
End Sub

enter image description here