3

我有两列通过连接它们组合成第三个辅助列。

一个是 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 中。所以,这里会555 为 2,666 为 2)。

我最终得到这样的报告:

IDENT   UNIQUE_COUNT
555     2
666     2

我试图用代码做的是摆脱原始表中对帮助程序 COLUMNC 的需要,并且仍然允许我在第二个表中实现相同的结果。

再次,提前感谢。

4

2 回答 2

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

在此处输入图像描述

于 2013-05-03T00:30:22.223 回答
0

好的,几个月后我已经意识到我自己的问题的答案。

你可以用几种方法(可能还有更多),

1)您可以在没有 VBA 的情况下使用数组公式来做到这一点。

因此,如果您有:

+---+----------+---------+------+
| | 一个 | 乙| C |
+---+----------+---------+------+
| 1 | 专栏 | 专栏 | 身份证 |
| 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 | 身份证 | 唯一计数 |
| 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))]

所以,如果有人想知道,这是构建“虚拟助手列”的几种方法。

于 2014-03-08T06:30:00.867 回答