美文网首页
只会用 VLOOKUP?这些奇技淫巧了解一下!

只会用 VLOOKUP?这些奇技淫巧了解一下!

作者: 小折线 | 来源:发表于2020-10-17 17:07 被阅读0次

    上次讲了如何使用IF和CHOOSE配合VLOOKUP实现反向VLOOKUP。

    然而,挤牙膏不是我的专长。 今天,我们来盘点一下EXCEL中常用的数据查询方法。

    假设场景

    为何更好展现这些查询方法,我们不妨设想一个场景
    假如我有如下的一张表,需要快速地找到所有姓赵的学生的成绩

    为了获得姓赵的所有学生的成绩,我们需要用怎么样的逻辑来完成呢?

    1. 直觉告诉我,首先我需要获得所有同学的姓氏
    2. ​接着,我应该很自然地把姓赵的同学筛选出来
    3. 最后,我便可从容不迫地匹配出所需的同学的成绩

    在开始具体实现之前,我们还需要注意,实现这件事方法有很多,但是怎样的方法才是合适的,才是符合需求的

    • 比如,今天需要姓同学,明天你是否又需要姓的同学的成绩,或者其他某个姓氏的成绩了呢
    • 比如,如今你的表中有几十个人,明天你是否需要从全校的几千人中查询

    如果需求简单,复杂的方法反而浪费时间
    如果需求复杂,完善的方法可以让你事半功倍

    接下来,我们就来看看,简单可以有多么简单,复杂又可以有多么复杂,他们适用的场景又有什么不同


    极致简单版

    1.获得所有同学的姓氏

    在不考虑复姓的前提下,获得姓名中的姓氏,不要太简单哦!

    这里提供两种方法:

    • 分列
      是EXCEL最常用的拆分方法,可以将一列文本,按照一定的规则,拆成几列。
    • MID函数
      相比于分列,我更喜欢MID
      MID可以对字符进行拆分,取出中间任意几个字符
    MID("ABC", 1, 2)  
    # 从ABC这个字符串的第1个字符开始,取出2个字符
    # 结果为 AB
    

    比如,如果要取出同学姓名中的姓氏,MID(同学姓名,1,1)就可以了

    2. 筛选学生和成绩

    有了姓氏,接着我们需要把某个姓氏的同学都挑选出来

    同样提供两个操作,筛选和切片器

    • 筛选
      EXCEL中用于数据查询最最常见的功能
      反正姓都有了,直接对姓氏那一列筛选就OK了。相信你懂的(  ̄ー ̄)

      image.png
    • 切片器

    切片器就是成了仙的筛选,真正做到了哪里要看点哪里

    只要将表格格式化或者使用pivot table,就可以轻松使用切片器,让你的筛选变成指尖愉快的单击。

    极致复杂版

    快乐的时光总是那么短暂,接下来,我们来搞点烧脑的东西。

    本段内容如果催眠,那就来瓶脉动吧!重新脉动起来(脉动可以考虑适当赞助)

    EXCEL中什么最复杂,那自然是公式啊
    EXCEL中什么公式最复杂,那自然是嵌套公式啊

    如果我们要使用公式来解决这个问题,那么问题的复杂程度的陡然上升。

    这时,有人就要问了,既然我有简单的方式,为什么要反过来使用复杂的呢?

    行为艺术吗?

    行为艺术自然是没有必要的,复杂的公式自然有其优势,比如

    • 简单法需要添加一列姓氏辅助列,会在原表格上添加冗余数据
    • 简单法只能筛选数据,得到数据还需要把内容复制出来
    • 无论是删选,还是切片器,如果全校有几千个人,百家姓都在,那么使用起来其实是比较麻烦的

    如果用公式法,一定程度上可以解决以上问题!

    在公式法中,这是一个典型的一对多筛选问题(利用一个筛选多行数据)
    也是EXCEL各路函数争奇斗艳,施展灵魂操作的地方

    争奇斗艳者

    • 神奇的数组函数
      EXCEL可以处理单个值的计算,也可以处理一个序列。
      即,你输入一个序列,他对里面每一个元素运算,然后再输出一列结果
    • 优雅的Match
    Match("C", {"A","B", "C", "D"})  
    # 在序列中搜寻C,输出找到的位置
    # 即 3
    
    • 精准的INDEX
    INDEX({"A","B","C", "D"},3)  
    # 在序列中找到位置为3的值,输出
    # 即 C
    
    • 深藏不漏的IF
      IF配合数组函数,可以实现1对多的查询
    IF({"A","B","C","D"} = "C", {1,2,3,4},0)  
    # ABCD对应1234 
    # 将序列中的每一个值与C比较,如果相等,输出对应的值,反之输出0
    # {0,0,3,0}
    

    技术路线

    而利用以上的函数,我们又有两条技术路线可以尝试:

    • 路线1
      使用IF直接获得比较每一个名字的姓是否是,如果是,可以获得对应的行号,获得行号后就可以使用INDEX函数来获取姓名列和成绩列的值了

    示意图如下

    • 路线2
      第二种操作就很有趣了,我们可以通过一些手段,将一对多问题,转化为一对一问题,然后使用MATCH处理。

    示意图如下

    具体实现

    能看到这里的小伙伴一定是真爱, 给你们比心!

    由于具体实现比较复杂,我很难在有效的篇幅内讲清,所以这里只能意思一下!

    想深入了解的读者可以在文末获取一个EXCEL文件,自己试验一下。

    • 路线1
    #Name
    =IFERROR(INDEX(A$1:A$17,SMALL(IF(N$2=MID(A$1:A$17,1,1),ROW(A$1:A$17),""),ROW(A$1:A$17))),"-")
    #SCORE
    =IFERROR(INDEX(B$1:B$17,SMALL(IF(N$2=MID(A$1:A$17,1,1),ROW(A$1:A$17),""),ROW(A$1:A$17))),"-")
    
    • 路线2
    #Name
    =IFERROR(INDEX(A1:A17,SMALL(IFERROR(MATCH(O2&ROW(A1:A17),MID(A1:A17,1,1) & ROW(A1:A17),0),""),ROW(A1:A17))),"-")
    #SCORE
    =IFERROR(INDEX(B1:B17,SMALL(IFERROR(MATCH(O2&ROW(A1:A17),MID(A1:A17,1,1) & ROW(A1:A17),0),""),ROW(A1:A17))),"-")
    

    尾声

    国庆,中秋,已然结束啦,祝大家在接下的学习与工作,一切顺利。

    EXCEL文件获取方式:后台回复EasyCEL

    肖恩
    2020.10

    相关文章

      网友评论

          本文标题:只会用 VLOOKUP?这些奇技淫巧了解一下!

          本文链接:https://www.haomeiwen.com/subject/ilxkyktx.html