有个学员问了一个问题,叫古老师帮忙看一下,他们公司一个高手帮他写的一个公式,IF函数里面,第一个参数出现了{1,0},他理解不了这样写的含义是什么?(如下图所示)希望我能够帮他解释一下。

由于源数据比较大,做了一个简化处理,发现就是一个简单的VLOOKUP反向查找的案例,可能这位学员的Excel版本不怎么样,连XLOOKUP函数都没有,所以高手为他写了一个VLOOKUP的经典反向查找公式。就这个案例中的IF函数中出现的{1,0}来解释,需要先对数组有概念。
数组的定义
在Excel中,用大括号括起来的,都是一个数组,数组可以是一个,也可以一多个,区分为一维数组、二维数组等。这里以一维数组举例,在Excel录入垂直方向和水平方向两组数据:
=B3:B10,这是一个垂直的数组,鼠标移动到引用区域,自动转成数组的显示方式{1;2;3;4;5;6;7;8},注意这里是分号
=E2:G2,这是一个水平的数组,显示为{1,2,3},注意这里是逗号;
有了这个定义就很好理解 {1,0}是什么意思了,就是一个水平的一维数组,包含两个元素,数字1和数字0;

逻辑值的定义
上面对数组做了简单的定义,还需要学习一个知识点,就是Excel中对于逻辑值的判定,这也是IF函数中非常重要的知识点。Excel中的逻辑值(Logical values)是一种表示真或假的数据类型,。
TRUE:表示真,成立,正确;
FALSE:表示假,不成立,错误;
而在如果逻辑值需要运算的话,其中1表示TRUE,0表示FALSE,如果需要运算的话,有三种方法,分别是N函数法,减负运算法,相乘法,效果如下图所示:

IF函数的理解
当你了解了数组和逻辑值这个定义后,加上对IF函数参数的了解,就非常容易理解{1,0}这样的写法了,先看IF函数的参数:
IF(logical_test,value_if_true,value_if_false)
转换中文,注意正确代表TURE,错误代表FALSE
IF(表达式,表达式正确返回的值,表达式错误返回的值)
所以IF中的{1,0},就是返回对应两个结果,其中1代表正确,0代表错误,因为是逗号,所以返回的是垂直方向的数组;回来上方VLOOKUP函数中的参数:
=IF({1,0},D3:D10,C3:C10)
函数释义:如果正确就返回D3:D10,错误返回 C3:C10,因为是逗号,所以返回垂直方向两列,效果如下图所示。这样相当于两列调换了一个位置,从而实现了VLOOKUP函数从左到右的查找。

案例1:提取数字
{1,0}除了能够应用在IF函数中,还可以应用到很多场景中,主要利用的就是数组重新构建,这里只是为说明{1,0}用法,提取数字有其他更佳解法不再讨论范围;
下图中的数字没有规律,在前在后在中都有,需要把数组提前出来,可以录入函数:
=CONCAT(TAKE(IFERROR(MID(B3,SEQUENCE(LEN(B3)),1)*{1,0},""),,1))
函数释义:
用LEN函数判断单元格中的字节长度,用MID函数把单元格内的所有字符分别分拆开,再分别进行运算,乘1和0,是数字的就留下,再用TAKE保留1列后,用CONCAT合并,效果如下:

案例2:重新构建数组
这个案例是一个非常经典的订单分配,这里利用IF{1,0}重新构建的数组。订单的数量非常大,需要按包装数自动分配,这样就可以快速派单了。
录入动态数组函数一键展开:
=REDUCE({"订单号","数量"},B3:B5,LAMBDA(X,Y,VSTACK(X,IF({1,0},Y,BYROW(WRAPROWS(SEQUENCE(OFFSET(Y,,1)),OFFSET(Y,,2)),LAMBDA(X,COUNT(X)))))))
函数释义:
比较复杂,释义起来比较复杂……,直接看下图。

