if({1,0}, 列A,列B)
这样的公式会形成一个数组,即符合1的条件为真值,符合0的条件为假值,形成 {列A;列B} 的数组
如,假设
A1至A5的内容为10,50,45,78,67.
B1至B5的内容为A,B,C,D,E,
在C1单元格写入C,
要求D1单元格写入VLOOKUP函数公式返回B列中与C1单元格相同数据同一行A列的值
则,
D1单元格写入公式
=VLOOKUP(C1,IF({1,0},B1:B5,A1:A5),2,0)
运算后就形成了如下公式
=VLOOKUP(C1,{"A","B","C","D","E";10,50,45,78,67},2,0)
因为C1值为C,符合第一组数组中(即分号前的{"A","B","C","D","E})的第三项,所以返回第二组中(即分号后的{10,50,45,78,67})的第三项45,因此公式得出值为45
其实这样的公式比较烦锁,不如用INDEX和MATCH组合函数方便
如
=INDEX(A1:A5,MATCH(C1,B1:B5,0))
此公式中含有数组{1,0},所以是一个数组公式。数组公式的特点是数组中的每一个元素都要参加运算,因此这个公式可以理解成if(1,列A,列B)及if(0,列A,列B)两次运算的结果。第一次运算的结果是列A,第二次运算的结果是列B,所以他们组合后的结果是列A列B组成的二维数组。当然公式中的列A列B是可以用任意列替换的。if函数的这种用法主要是为了得到一个重组后的,可以和工作表原列序不一致的内存虚拟数组。
这个写法通常是用在vlookup函数中,用于搜索 查找列 之前的某一列的对应值,即从右到左的查找。
如 A列为序号列,B列为姓名列,D列是要查找的姓名,需要通过查找姓名得到序号,可在E1中输入"=vlookup(d1,if({1,0},B:B,A:A),2,0)"
当然若换用index与match两个函数的组合,更容易理解。