深入理解LOOKUP:LOOKUP函数的查找原理

最近推送的五篇文章:

·  正  ·  文  ·  来  ·  啦  ·

说明

这是2016年写的一篇旧文,搬到公众号上来。

引言

一只小猴,坐在一堆按从小到大排好顺序的包谷前,想拿一根最大的包谷,但小手又太小了,比手大的包谷拿不了,怎么才能用最快的方法找到拿得下的最大的包谷呢?

Excel对LOOKUP函数的帮助写了这么一句话: “查找区域”中的值如果不按升序排列,LOOKUP函数可能无法返回正确的值。我们使用LOOKUP数据按升序的时候少,乱序的情况用得更多。所以,必须得弄清楚什么情况下无法准确地返回查找值?如果不弄清楚,公式结果是怎么错的都不知道,后患无穷。要弄清楚,就必须得弄清楚查找原理。

一、LOOKUP函数基本知识

语法:

=LOOKUP(查找值,查找区域,结果区域)

示例:

=LOOKUP("龙逸凡",A2:A7,B2:B7)

要点:

1、 “查找区域”中的值必须按升序排列:..., -2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE;否则,LOOKUP 可能无法返回正确的值。 文本不区分大小写。

2、 如果 LOOKUP 函数找不到“查找值”,则该函数会与“查找区域”中小于或等于“查找值”的最大值进行匹配(注:在满足要点1“数据升序排列”的前提下)。

3、 Excel帮助文件上要求:“查找区域”与“结果区域”大小必须相同,实际上可以不必相同。

LOOKUP第三参数如果为一个单元格(比如输入B2或B2:B2),则取值范围默认为横向,等同于B2:H2、B2:M2等。

如果第三参数是包含二个单元格以上的纵向单元格区域,则单元格范围大小不影响公式的计算。比如下面的公式是等效的

=LOOKUP("龙逸凡",A2:A7,B2:B3)

=LOOKUP("龙逸凡",A2:A7,B2:B7)

=LOOKUP("龙逸凡",A2:A7,B2:B65535)

有点类似于SUMIF第三参数(SUMIF第三参数真正起作用的是第三参数单元格区域左上角那个单元格,起到坐标定位的作用,详见本人写的《深入理解SUMIF:如何多表多列多条件求和?》

二、 LOOKUP函数的查找原理

查找原理和要点可总结为四条:

1、LOOKUP函数要求“查找区域”中的值必须按升序排列。如果“查找区域”没有按升序排列,Lookup函数也会很傻很天真地认为你是个按规则办事的人,你已将数据按升序排列。

注意:这一点对理解LOOKUP函数的查找逻辑非常重要。

2、由于“查找区域”已按要求按升序排列,为了提高查找效率,LOOKUP都是按二分法查找。

具体的查找方式:

假设要查找的值为X,将X与已升序排列的“查找区域”最中间位置的那个数(我们称之为“位中值”)进行比较:

  • 若X等于或大于“位中值”,由于已按升序排列,前半段的数肯定比位中值更小,所以就在“查找区域”的后半段中,继续按二分法进行查找。

  • 若X小于“位中值”,由于已按升序排列,后半段的数肯定比位中值更大,所以就在“查找区域”的前半段中,继续按二分法进行查找。

确定中间位置的计算方式:个数为奇数时取最中间那个,为偶然个时并列最中间的那两个数的左边那个。

3、 如果 LOOKUP 找不到与“查找值”相等的数,它会使用“查找区域”中小于或等于 “查找值”的最大值。

要注意的是:“查找区域”乱序的时候,并不一定会返回小于或等于的最大值,而是一直按二分法进行查找,直到查找到相等的数或查找完“按规则应该查找的位置”(不是查找完所有的值),如果还找不到相等的数,就返回结束查找前最近一个符合条件的值。如果有多个符合条件,则返回最后一个符合条件的值。

4、LOOKUP在查找区域中的遇到空值和错误值时,会忽略空值和错误值,继续在后半段进行二分法查找。

三、举例 说明

下面举例解释一下LOOKUP的查找原理。

如下图,我们要在A2:K2单元格区域查找9,并返回A3:K3区域对应的值,公式计算结果为8。

如果将H2单元格8.1改为小于等于9的任何数,比如2,接前面第三步:公式均返回A3:K3对应的值8。

如果将H2单元格8.1改为大于9的任何数,比如100,接前面步骤三:由于100〉9,不符合条件,则公式返回上一个符合条件的7.1所对应的值7。

如果查找值是8,H2仍为8.1,则8.1>8,不符合条件,所以就返回符合条件的最后一条值7.1所对应的7。

为了帮助理解,多举几个例子,大家按照上面的方法一步步进行二分法查找,琢磨一下查找原理。

本文示例文件下载地址:

http://vdisk.weibo.com/s/zm7DlBPwfe7sL

致谢:

本文参阅了微软最有价值专家MVP 方骥的文章《LOOKUP二分法查找策略图文详解》,也是在其文章的基础上进一步的细化讲解,在此向方骥老师表示致敬和感谢!!

增补答疑

前二天的介绍LOOKUP的文章出来后,有读者朋友反映看不懂多条件查找公式。现将《偷懒的技术》答疑汇集中的此部分答疑摘录如下:

多条件查找公式模型:

=LOOKUP(1,0/(条件1*条件2),结果区域)

公式解释:

  • “条件判断”计算结果只有二个:1和0;

  • “0/条件”的结果也只有二个:0或错误值#DIV/0!。公式0/(条件1*条件2)的结果是0或错误值#DIV/0!组成的数组。

  • LOOKUP特点:自动忽略错误值,是按二分法进行查找的,要求数据按升序排列。
    LOOKUP在全是0或错误值#DIV/0!组成的数组中查找1,是找不到1的,根据二分法只会返回最后一个0。
    所以:
    公式“=lookup(1,0/(条件),返回结果区域)”会返回符合条件的最后一个值所对应的结果区域的值。

如果本文对你有帮助,走时别忘了点一下文章底部的广告↓和右下角的大拇指↘

(0)

相关推荐

  • 出个小题考考你,看你能做对几道?

    人物速写 前言 LOOKUP函数有两种形式,一种是向量形式,一种是数组形式 函数 LOOKUP 的向量形式是在单行区域或单列区域(向量)中查找数值,然后返回第二个单行区域或单列区域中相同位置的数值: ...

  • 比vlookup更强大的函数lookup函数(下:数组用法)

    的 上次我们说了lookup的向量用法,今天说下它的数组用法. -01- 函数说明 lookup函数的数组结构如下图第2种写法,有2个参数.lookup的数组用法是在数组的第一行或第一列中查找指定的值 ...

  • LOOKUP函数的使用方法

    Lookup函数一共有两种形式一种是向量形式一种是数组形式,我主要介绍其向量形式 向量形式 Lookup函数:在单行区域或单列区域(向量)中查找数值,然后返回第二个单行区域或单列区域中相同位置的数值 ...

  • Excel | LOOKUP查询函数十种用法大集锦,快快收藏了备用!

    韩老师自己的书,集许多实用案例: 问题来源 最近讲过不少查询函数的用法,有朋友说韩老师能不能把每种函数的用法做个归纳对比?好吧,韩老师今天从LOOKUP函数讲起-- 韩老师视频讲解 第一种用法:普通查 ...

  • 用函数公式查找图片?我可没骗你

    各位表亲你们都哈喽啊,今天和大家一起学习如何使用函数公式来查找图片.先看效果: 是不是有点意思啊.好,咱们看看如何实现这样的效果. 步骤一: 准备好图片资料,话说巧媳妇难做无米之炊,没有资料,如何查询 ...

  • 什么是函数信号发生器?函数信号发生器工作原理及实现方法

    科技及工业应用要求提供的信号越来越精密,简介推动了函数信号发生器的发展和推广,成为工业生产.产品开发.科学研究等领域必备的工具,它作为一种精密的测试仪器,在电子行业得到了广泛的应用.今天小编就来为大家 ...

  • 初识矩阵乘积函数mmult的原理和基本用法

    小伙伴们过年好!祝大家在新的一年里健康,平安,自在,百毒不侵.那我们今天也来学习一个新函数的用法,那就是mmult.在官方的解释中,它是返回两个数组的矩阵乘积,实际上乘积之后还要求和,可以看作sump ...

  • 颜色查找原理与使用:调色教程第7篇

    听很多关注公众号的朋友说花了3000多块钱,学了一个颜色查找怎么用,现在做培训的简直是在骗钱啊! 颜色查找功能其实只是载入了一种设置,像预设一样. 经常看到有人分享调色动作.调色预设.调色插件.还有颜 ...

  • ps颜色查找原理视频:载入颜色查找配置文件

    ps颜色查找原理视频|ps颜色查找配置视频|ps载入颜色查找视频|ps颜色查找文件视频 本视频教程由部落窝教育分享.

  • 理解了辐射的本质,人们就理解了利用射线治疗肿瘤的原理

    人们都知道核辐射对人的身体会造成很大的伤害,但人们却不知道这到底是为什么.这都是由于人们对事物的存在状态还没有真正的认知所造成的. 我认为物质存在的稳定状态是其与环境因素力的相互作用有区间限制的系统平 ...

  • 运用Vlookup函数,查找某个时间段内数据的方法

    平时工作时,很多Excel表格中数据会很多,而且比较凌乱,没有特定的排列顺序,这时如果需要查找其中的某些信息,可以用查找的方法,但是如果需要查找一段时间内的数据呢?显然Excel自带的查找功能并不能满 ...

  • 【视频更新】第五十三集 指针做函数参数传递的原理分析

    介绍了C语言中指针做形式参数传入函数时的原理