我有两个列,通过连接它们,我将它组合成第三个辅助列。
一个是4位数的列,另一个是单个数字。
例如:
COLUMNA COLUMNB COLUMNC
1234 1 12341
1234 1 12341
1234 2 12342
2345 1 23451
2345 2 23452
2345 2 23452
然后我在第4列中运行数组公式(使用每行中的标识符),表示每个标识符的列C有多少唯一值。
如果可能的话,我想绕过辅助列的使用 - 在VBA中构建一个范围(以数字格式),我可以在代码中引用它,这样我就可以取消帮助列了。
希望这对某人有意义,并且他们知道如何去做。
提前致谢。
编辑:抱歉 - 基于下面Santosh提供的非常有用的答案(我可以肯定地使用我的另一个问题),我意识到我还没有完全解释自己。
每一行都有一个标识符(此处显示为COLUMN_IDENT)
COLUMNA COLUMNB COLUMNC COLUMN_IDENT
1234 1 12341 555
1234 1 12341 555
1234 2 12342 555
2345 1 23451 666
2345 2 23452 666
2345 2 23452 666
然后,我创建一个表 - 使用数组公式(基于FREQUENCY函数) - 显示每个唯一标识符(在本例中为555和666),对于连接的COLUMN C,会出现多少个唯一值。所以,在这里它将为2 555和2为666)。
我最终得到了这样的报告:
IDENT UNIQUE_COUNT
555 2
666 2
我正在尝试使用代码来摆脱原始表中对辅助COLUMNC的需求,并且仍允许我在第二个表中实现相同的结果。
再次,先谢谢。
答案 0 :(得分:0)
尝试以下代码。
Sub sample()
Dim lastRow As Long
With Sheets("Sheet1")
lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
.Range("A1:B" & lastRow).RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End With
End Sub
答案 1 :(得分:0)
好的,几个月后我已经意识到了自己问题的答案。
你可以通过几种方式(可能还有更多),
1)您可以使用数组公式在没有VBA的情况下执行此操作。
所以如果你有:
+---+---------+---------+-----+ | | A | B | C | +---+---------+---------+-----+ | 1 | COLUMNA | COLUMNB | ID | | 2 | 1234 | 1 | 555 | | 3 | 1234 | 1 | 555 | | 4 | 1234 | 2 | 555 | | 5 | 2345 | 1 | 666 | | 6 | 2345 | 2 | 666 | | 7 | 2345 | 2 | 666 | | 8 | | | | +---+---------+---------+-----+
...你想生成这个:
+---+-----+--------------+ | | D | E | +---+-----+--------------+ | 1 | ID | UNIQUE COUNT | | 2 | 555 | 2 | | 3 | 666 | 2 | | 4 | | | +---+-----+--------------+
...然后将其作为E2和E3中的数组公式(确保范围正确):
=SUM(IF(FREQUENCY(IF(C2:C7=D2,MATCH(A2:A7&B2:B7,A2:A7&B2:B7,0)),IF(C2:C7=D2,MATCH(A2:A7&B2:B7,A2:A7&B2:B7,0)))>0,1))
2)如果你需要在VBA中,你可以(除其他外)做Evaluate
"作弊" (这里我使用方括号,这是Evaluate
的简写):
Range("E2") = [SUM(IF(FREQUENCY(IF(C2:C7=D2,MATCH(A2:A7&B2:B7,A2:A7&B2:B7,0)),IF(C2:C7=D2,MATCH(A2:A7&B2:B7,A2:A7&B2:B7,0)))>0,1))]
所以,如果有人想知道,那就是构建"虚拟助手列的几种方式"。