这是一个令人尴尬的简单问题,但我无法找到解决问题的方法,也无法通过在线搜索找到想法。
假设我在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。
使用数据透视表可以获得的最佳效果就像这样
如何在MS Excel中执行表2之类的任务?如果可能的话,可以使用VBA脚本。
答案 0 :(得分:3)
将列A复制到另一个未使用的列并执行数据►删除重复项命令然后对其进行排序。很少有公式能够有效地处理数千行数据,而且几乎没有公式可以工作。
对其旁边的B列执行相同操作。不要扩展删除重复项所要求的选择。
接下来,在您刚创建的未重复的A列数据旁边的列中使用以下公式:
this.dispose = this.viewFactory.insert(this.element, this.viewHtml, viewModel);
填写无重复数据的范围。我假设您使用E列创建了第一个未重复的数据集,并使用了第F列F列。
答案 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