将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立“虚拟助手专栏”的几个方法。