首页 > 解决方案 > 如何使用VBA从excel中的列中删除所有重复项,只留下没有重复的行?

问题描述

我正在尝试从 Excel 中的一列数字中删除所有重复值。我希望剩余的列包含原始表中的唯一值。

我曾尝试使用 RemoveDuplicates 方法,但它只删除重复项的单个实例而不是全部。

我也尝试过使用以下代码,但它与 RemoveDuplicates 有相同的问题。我不确定为什么,因为“唯一”标签设置为“真”。

{MYWORKSHEET]AdvancedFilter Action:= _
    xlFilterCopy, CopyToRange:=[MYWORKSHEET].Range("B1"), Unique:=True

我只找到了一种理论上应该可行的解决方案,它使用嵌套的 For 循环遍历每一行并检查它是否与表中的任何其他行等效。唯一的问题是这会使我的机器上的 Excel 崩溃,因为它必须循环太多。除了这种蛮力方法之外,还有什么方法可以做到这一点?

这是我正在寻找的内容:

|-------| |----------------| |-------------------|
| INPUT | | DESIRED OUTPUT | | WHAT I DONT WANT  |
|-------| |----------------| |-------------------|
| 11111 | |      11111     | |       11111       |
|-------| |----------------| |-------------------|
| 22222 | |      55555     | |       22222       |
|-------| |----------------| |-------------------|
| 33333 |                    |       33333       |
|-------|                    |-------------------|
| 22222 |                    |       55555       |
|-------|                    |-------------------|
| 33333 |
|-------|
| 55555 |
|-------|

标签: excelvba

解决方案


Advanced Filter与公式标准一起使用,例如:=COUNTIF($A$6:$A$11,A6)=1

在此处输入图像描述

在此处输入图像描述

结果:

在此处输入图像描述

如果您需要改用公式,您可以执行以下操作:

=IFERROR(INDEX(inputTbl,AGGREGATE(15,6,1/(COUNTIF(inputTbl[Input],inputTbl[Input])=1) * ROW(inputTbl)-ROW(inputTbl[#Headers]),ROWS($1:1))),"")

推荐阅读