V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sinORcos
V2EX  ›  问与答

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

  •  
  •   sinORcos · 2020-11-05 09:17:24 +08:00 · 1391 次点击
    这是一个创建于 1509 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    12 条回复    2020-11-05 13:43:20 +08:00
    icelake
        1
    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
        2
    Hilalum  
       2020-11-05 10:01:05 +08:00
    vlookup 函数
    sinORcos
        3
    sinORcos  
    OP
       2020-11-05 10:41:50 +08:00
    @icelake 我目前是使用新版的 xlookup 函数,但是只能一一对应的输出,会出现大量空白单元格,还要再手动调整一遍,想要实现完全的自动化,所以在寻找能顺序输出的办法,但是我不完全不懂 VBA……很难受
    carryer
        4
    carryer  
       2020-11-05 10:52:42 +08:00
    用函数找完再筛选,复制出来
    TimePPT
        5
    TimePPT  
       2020-11-05 11:04:14 +08:00
    sinORcos
        6
    sinORcos  
    OP
       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
        7
    TimePPT  
       2020-11-05 11:25:19 +08:00
    @mervynsword 那就不清楚了,这种情况我一般 shell 脚本或者 python 直接处理了
    geelaw
        8
    geelaw  
       2020-11-05 11:35:03 +08:00   ❤️ 3
    Excel 的公式是自带向量化功能的,而且 FILTER 函数返回值就是向量,所以可以用

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

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

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

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

    =FILTER(minuend, COUNTIF(subtrahend, minuend) = 0)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2985 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 14:01 · PVG 22:01 · LAX 06:01 · JFK 09:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.