Excel 能否使用在一列中直接输出另外两列中其中一列不包含的项?

2020-11-05 09:17:24 +08:00
 sinORcos

最近因统计需要,在寻找能在 excel 的一列中,直接输出另外两列中其中一列不包含的项。

例如,A 列中分别有 ABCDEFG 七个项,B 列中有 FECBA 五个项。A 、B 两列的数据排序不同,且因为其他列数据的对应问题,不方便进行重排序。

这时,我希望额能在 C 列中直接输出 DG 两个项,也就是 A 列有、B 列没有的项,且中间没有空白单元格。

请问用什么办法能做到?在线等,请大佬指路。

1200 次点击
所在节点    问与答
12 条回复
icelake
2020-11-05 09:57:52 +08:00
要想直接在 C 列输出只能通过 VBA 。
如果不想用 VBA,简单的方法是用 vlookup 查找,但不能实现 C 列中从上往下顺序输出差异项:
在 C 列中输入“=IF(ISNA(VLOOKUP(A1,B:B,1,FALSE)),A1,"")”,可以实现在 C 列显示 B 列缺少的项目。
Hilalum
2020-11-05 10:01:05 +08:00
vlookup 函数
sinORcos
2020-11-05 10:41:50 +08:00
@icelake 我目前是使用新版的 xlookup 函数,但是只能一一对应的输出,会出现大量空白单元格,还要再手动调整一遍,想要实现完全的自动化,所以在寻找能顺序输出的办法,但是我不完全不懂 VBA……很难受
carryer
2020-11-05 10:52:42 +08:00
用函数找完再筛选,复制出来
TimePPT
2020-11-05 11:04:14 +08:00
sinORcos
2020-11-05 11:22:58 +08:00
@TimePPT 这样还需要重新手动筛一遍,而不是直接输出结果,A 、B 两列是名单,我是要找出 B 列中相比 A 列少的那些人,说白了就是类似一次性输出缺席的名单。我目前是使用 xlookup 来实现,形如:

xlookup(a2,b:b,b:b,"")
翻译一下就是再 b:b 中查找 a2,如果找到了,输出对应行和 b:b 的交叉点的值,如果没找到就输出空白。
然后再套一个 IF 来输出空白值是对应的人员姓名。

但是输出后有大量的空白单元格,而不是一次性顺序输出一个完整名单。有没有大神指点一下 VBA 的解决方法?最后搞这个重复性的工作被弄得很烦。
TimePPT
2020-11-05 11:25:19 +08:00
@mervynsword 那就不清楚了,这种情况我一般 shell 脚本或者 python 直接处理了
geelaw
2020-11-05 11:35:03 +08:00
Excel 的公式是自带向量化功能的,而且 FILTER 函数返回值就是向量,所以可以用

=FILTER(minuend, COUNTIF(subtrahend, "=" & minuend) = 0)

minuend 是被减范围,subtrahend 是减范围,例如

https://i.loli.net/2020/11/05/TDMA2jJ7vO1hXEa.png
renmu123
2020-11-05 11:39:42 +08:00
=SORT(IF(ISNA(XLOOKUP(A1:A7,B:B,B:B)),A1:A7,""),1,-1)

写完后发现还是楼上大佬厉害,我用了动态数组功能
Devin
2020-11-05 11:48:50 +08:00
1. 把这两列复制到新表
2. 选定这两列,开始--条件格式--突出显示单元格规则--重复值
3. 筛选 A 列,按颜色筛选--无填充,复制出来
sinORcos
2020-11-05 13:06:53 +08:00
感谢各位大佬指路
@geelaw
@renmu123
freeair
2020-11-05 13:43:20 +08:00
@geelaw #8 测试了下,还可以略微简化

=FILTER(minuend, COUNTIF(subtrahend, minuend) = 0)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/721894

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX