查找匹配字段并返回对应值 (Excel 篇)

一、场景描述——两张数据表:

1. 索引库

假设我们有一个数据比较齐全的基础数据表(这里不妨称为 “索引库”),作为日常检索用。如下图所示:


索引库.png
2. 查询库

现在接收到一张新的数据表(这里称为 “查询库”),如下图所示:


查询库.png

我们希望达到什么目的呢?
将查询库与索引库进行数据比对,以 ”姓名“ 作为主键 (Primary Key) 返回补全以下字段:“是否存在”、“性别”、”年龄”、“教育程度”、“星球”。

咳咳~说人话!
<查询库>:“嗨,大佬!听说你上知天文下知地理,我手头上有一些人的资料,但是很不齐全,只知道他们的婚姻状况。你看能不能帮忙补齐他们的资料,好让我多了解他们一点。”
<索引库>:“当然可以!你把他们的 ‘姓名’ 发给我,凡是在我这里备案了的,我会把他们的 ‘性别’、‘年龄’、‘教育程度’ 和 ‘星球’ 全部打包给你。但是也可能有少数没备案过的人,那我就爱莫能助了,建议你添加 ‘是否存在’ 一项,将这些没备案过的人标记为 ‘否’,备案过的人标记为 ‘是’。“
<查询库>:“哇,这样就一目了然了!”


二、实现方式:

1. 在 “查询库” 中补全字段:
Excel 补全字段.png
2. 尝试使用 VLOOKUP 函数

因为判断 “是否存在” 需要将查找函数作为基础函数,所以我们先尝试查询 “性别” 字段,并返回对应值,公式为:
=VLOOKUP($A2,索引库!$A:$E,2,FALSE)

尝试查询字段并返回对应值.png

结果返回的是 N/A,回头检查公式,没有大的问题!填充序列后,发现有既有正常的返回值,也有 N/A 值:

尝试填充序列.png

肉身侦查 “索引库”,发现报错的两行中,它们的主键值 “肖二” 和 ”赵六“ 恰好不在 ”索引库“。于是我们需要事先判断 ”查询库“ 中的主键值在 ”索引库“ 中是否存在。

在索引库中不存在的项将返回 N/A 值
3. 使用 IF + ISERROR + VLOOKUP 函数查询主键 “是否存在”

既然当主键值不存在时,VLOOKUP 将返回 N/A 值,那么 ISERROR 函数可以将 N/A 值转换为布尔值,这样就变成了我们所需的布尔运算,用 IF 函数来判断 “是” 还是 “否”,公式为:
=IF(ISERROR(VLOOKUP(A2,索引库!$A:$E,1,FALSE)),"否","是")

用逻辑函数和 VLOOKUP 判断存在性
4. 嵌套布尔函数以改造其他字段的 VLOOKUP 公式

我们的改造目标是,预先判断主键值是否存在,若存在,则用 VLOOKUP 返回对应值;若不存在,则为空。在上述公式的基础上稍加改动,就有了这个公式:
=IF(ISERROR(VLOOKUP($A2,索引库!$A:$E,1,FALSE)),"",VLOOKUP($A2,索引库!$A:$E,3,FALSE))

先判断存在性,再返回对应值
5. 使用 COLUMN 函数实现横向的自动填充

当前公式中 VLOOKUP 函数的第三个参数是一个常量,难以实现横向自动填充的效果。如下图所示:

VLOOKUP 返回值的列标为常量
当 VLOOKUP 返回值的列标为常量时无法横向自动填充序列.png

这里,我们用 COLUMN 函数来实现返回值列标的参数化。由于 “查询库” 中新增了 ”婚姻“ 和 ”是否存在“ 字段,导致 “查询库” 中 “性别” 等字段的列标比 ”索引库“ 中的列标大 2。比如:

数据表 字段 列标
查询库 性别 4
索引库 性别 2

因此,应将原公式中的常量 “2” 替换成 'COLUMN() - 2',于是新的公式为
=IF(ISERROR(VLOOKUP($A2,索引库!$A:$E,1,FALSE)),"",VLOOKUP($A2,索引库!$A:$E,COLUMN()-2,FALSE))

当 VLOOKUP 返回值的列标为参数时完美实现横向自动填充序列.png

成品见上图,外送对联一副:

上联:当馈赠者定倾尽所有
下联:未备案者恕爱莫能助
横批:感谢参数化


三、相关参数

本案主要涉及到 4 个函数,这里重点解析 VLOOKUP 函数。

函数名称 函数类型 函数表达式 描述 参数取值 实例
VLOOKUP 查找函数 VLOOKUP(a, b, c, d) 在索引区域 b 中检索 a 是否存在,若存在,则返回区域 b 中的第 c 列的值 详见下图
ISERROR 逻辑函数 ISERROR(a) 检验 a 是否为错误值 任意错误值(#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME? 或 #NULL!)
IF 逻辑函数 IF(a, b, c) 如果 a 为真,则返回 b, 否则返回 c a 为布尔值,c 为可选参数
COLUMN 查找函数 =COLUMN() or =COLUMN(a) 返回单元格所在列的列标 a 为单元格引用,省略 a 则返回公式所在列的列标
VLOOKUP 参数解读.png

注:下一篇文章将介绍 Python 的实现方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容