将Excel中的两列组合到使用VBA的“虚拟助手列”中
我有两列,我把它们合并成第三个帮手列。
一个是4位数列,另一个是单位数字。
例如:
COLUMNA COLUMNB COLUMNC 1234 1 12341 1234 1 12341 1234 2 12342 2345 1 23451 2345 2 23452 2345 2 23452
然后,我在第4列(使用每行中的标识符)中运行一个数组公式,为每个标识符列C有多less个唯一值。
如果可能的话,我想绕过使用助手列 – 在VBA中构build一个范围(以数字格式),我可以在代码中引用,这样我可以删除助手列。
希望对某人有意义,他们有一个想法如何去做。
提前致谢。
编辑:SORRY – 基于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
然后我创build一个表,使用一个数组公式(基于FREQUENCY函数)为每个唯一标识符(在本例中为555和666)显示连接的COLUMN C有多less个唯一值。所以,在这里它会2为555和2为666)。
我最终得到这样的报告:
IDENT UNIQUE_COUNT 555 2 666 2
我想要做的代码是摆脱在原始表中帮助者COLUMNC的需要,仍然让我在第二个表中实现相同的结果。
再一次,在此先感谢。
尝试下面的代码。
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)您可以使用数组公式在不使用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 | 独特的计数| | 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))]
所以,如果有人想知道,这是build立“虚拟助手专栏”的几个方法。