dudo博客

最近在研究一个Excel图表的时候突然发现了类似下面的这样一个公式:

{=VLOOKUP(F2,IF({1,0},C2:C14,B2:B14),2,0)}

我们都知道IF在做条件判断时,第一个参数是判断的条件,最常用的是返回一个布尔值True或者False,但是{1,0}这样的表达又代表了什么意思呢?

实际是Excel中的大括号{}是用来定义数组的,也就是{1,0}是最基本的一个二维数组,只有两个值1和0。至于Excel中数组的运算方式请看下面的两篇文章:

[数组]IF({1,0},……)公式的解释

IF({1,0},迷惑了这么多人,我们一起来聊聊究竟怎么玩转它!

让我感到奇怪的是,这两篇文章都要解释if{1,0}的使用方式的,前面都做得不错,特别是引入部分,解释得很到位,但是到了真正解释if{1,0}的运算方式的时候居然都是直接一带而过。

下面我来用最通俗的语言解释一下if{1,0}的运行方式:

我们假设有一样一个运算公式:

{=if({1,0},A1:A8,B2:B8)}

上面这个公式是这样运行的:

  • 首先,如果判断条件是一个类似{1,0}这样的二维数组,那么返回结果就是一个二维数组,如果判断条件是类似{1,0,0}这样的三维数组,那么返回的就是个三维数组。也就是说,返回数组的的维数由判断条件中的数组确定;
  • 其次,所有大于等于1的数值都会判定为True,0代表false,这也就是为什么我们最常见的数字都是0和1,而很少见到其他数字,因为你改成其他数字和1没什么区别;
  • 判断时会把条件数组中的每一个数字都代入一遍,也就是说先判断1,再判断0;如果是n维的数组那么就把n和数字都比较一遍;
  • 一旦条件确定就开始返回结果,如果代入的是1,那么就返回A1:A8;如果代入的是0就返回B1:B8,不管有多少个1和多少个0,都是这样返回,这就是为什么条件数组维数决定返回结果的维数。

下面我们来看个例子:

if{1,0}演示表,来自微软示例表

在上表中我们只要 Sales Rep 和 Sales 两列,应该怎么写呢?很简单,就是{=if({1,0},A4:A25,D4:25)}

需要注意的是:

  • 公式两端的大括号是通过组合键Shift+Ctrl+Enter输入的,公式内部的大括号是手动输入的;
  • 如果你先选定区域再输入公式那么使用上面的公式没有问题,如果你先在一个单元格输入公式再拖动,那么需要用$符号锁定,防止随着拖动而变化。

最后得到的结果如下 :


if{1,0}演示表,来自微软示例表

这不难理解 ,公式先判断数组的第一个值1,那么就返回A3:A25,然后再断送第二个值0,就返回B3:B25。如果条件数组是{1,0,0}呢?也很简单,无非是在上面的基础上,再多断送一个0,多返回一列B3:B25,这样你就得到了三列,其中有两列Sales列,不难理解吧。同理,如果是{1,0,0,1}呢?就返回4列,其中两个1对应的是A3:A25,分别在第一和四列,两个0返回两列B3:B25,在中间,如下:


if{1,0}演示表,来自微软示例表

这样应该可以理解了吧?然后再配合VLOOKUP在返回的数组中进行相应的查找和计算就可以了。

最后,特别提醒,因为返回的结果是数组,所以公式输入结束要按Ctrl+Shift+Enter确认。

随便说两句
名字:
Email:
网站:
内容: