1作者:西蜀鄙夫xsbf(2017年)目录第一回重新拼合两列数据........................................................................................................2第二回对数据区域的挑选........................................................................................................4第三回数组的长宽与数组的扩展............................................................................................6第四回多个阉割式if({1,0},xxx,)拼合数组................................................................................8第五回从数组的角度理解if({1,0},xxx,yyy)............................................................................11第六回从逻辑的角度理解if({1,0},xxx,yyy)............................................................................14第七回if({1,0},xxx,yyy)嵌套.....................................................................................................17第八回{1,0}嵌套的宽度问题..................................................................................................20第九回if({1,0},xxx,yyy)的一个经典实例.................................................................................22第十回choose()函数................................................................................................................24Excel公式函数的运用中,时见if({1,0},xxx,yyy)这样的结构出现,究竟是什么意思,如何理解呢?对于许多人来说,不太好理解,本文就此详述一二,力求最通俗最详细,欢迎诸君斧正。群内每日免费分享5份+最新资料300T网盘资源+40万份行业报告为您的创业、职场、商业、投资、亲子、网赚、艺术、健身、心理、个人成长……全面赋能!添加微信,备注“入群”立刻免费领取200套知识地图+最新研报收钱文案、增长黑客、产品运营、品牌企划、营销战略、办公软件、会计财务、广告设计、摄影修图、视频剪辑、直播带货、电商运营、投资理财、汽车房产、餐饮烹饪、职场经验、演讲口才、风水命理、心理思维、恋爱情趣、美妆护肤、健身瘦身、格斗搏击、漫画手绘、声乐训练、自媒体打造、效率软件工具、游戏影音……扫码先加好友,以备不时之需行业报告/思维导图/电子书/资讯情报致终身学习者社群致终身学习者社群关注公众号获取更多资料2第一回重新拼合两列数据1.要想明白if({1,0},xxx,yyy),先看个小问题,左边的数据区域中,如何把丁、辛两列挑出来到右边这样构成一个数组区域呢?方法一:选中D3:D7复制粘贴,再操作H3:H7;方法二:选中D3:D7按CTRL键拖动到右边。这些手动操作方法,非本文讨论的范畴,一律无视。2.方法三,在L3格输入=d3,然后下拉,再操作另一部分;方法四:如图输入数组公式,再操作另一部分。这两种方法,其实要用“两个”公式,能否只用一个统一的公式就能达到目的呢?3.试一下,图中企图用将两个数组用单纯的“+”或“&”这样来完成,显然不行。4.想出这个公式,先乘上数组{1,0},再考虑相加,恭喜成功!35.但是,刚才这个公式局限太大,应付纯数字还行,但是数组中有文本,显然就不能完成任务了。由此可以看出,这个问题,决非想象中的简单容易。6.要如何解决这个问题呢?不必兜圈子,请出今天的主角if({1,0},xxx,xxx),用这样的数组公式即完成任务。图中用一个统一公式把辛-丁两列提出来成了右边这样,不管原来数据是否数字还是文本均无问题。4第二回对数据区域的挑选8.刚才用到if({1,0},xxx,yyy)这个结构就是为了重新构造一个数组,原理是怎样的?这里且把这个结构阉割一下,去掉”yyy”,剩下if({1,0},xxx)。观察图中结果,({1,0}按“1”选择数据,其中的“1”可理解成“挑选”,“0”可理解成“不挑选”。9.此例,不妨把{1,0}丰富一下,夸张地搞一串。如图这个公式,先看右边结果,就把左边区域的数据“有选择地”挑选出来组成一个新的区域,挑选的方法就是,{0,0,1,0,0,1,1,0,1,0}这一句中“1”对应的丙、已、庚、壬列(图中红字已标识,辅助观察),而“0”就是没有挑选的列,对应右边显示的“false”。10.此例,{1,1,1,1}其实选中连续的4列,{0,0,0,0}就是没有选择,显示“false”11.插入一个小知识:{1,0,……}中的‘1’指的是‘非0’,并非一定是自然数的‘1’,下图5中,把1换成其他非0数,两种方法操作结果一样。12.{1,0,……}这个其实对应‘列’的选择,类似的{1;0;……}对应‘行’的选择,更有甚者,还可以是象{1,0;0,1……}这种‘行列’的组合。如图所示例子,这个挑选,其实相当于对一个矩形数据区域,筛掉某些数据,留下的数据构成一个数组。13.上例中{1,0;0,1……}太复杂,可以建立辅助表格,帮助观察。6第三回数组的长宽与数组的扩展14.{1,0,……}中的元素排列“个数”(也就这个数组的长与宽)非常重要。比如:{0,1,0,0;1,1,0,1}长为4宽为2;对于单行数组来说,大括号内有几个数,它的宽度就是多少,{1,0}长度为2,{1,1,1,1}长度为4,{0,0,1,0,0,1,1,0,1,0}长度为10。15.下图中{0,0,0,0}的长度为4,但设置公式范围时有6列,所以后两列显示“#n/a”出错信息。“false”跟“#n/a”是两个不同概念,前者表示未选择到数据,为“合法的空”,后者表示错误“非法的空”。16.出现“#n/a”是由于扩展错误,上图中,要把长度为4的数组扩展为长度为6,不足的2只好以错误值进行扩展。一个重要的特例是,数据如果是单行或单列,会得到正确的扩展。下图中,挑选{1,0,0,1}的长度为4,而被挑选的范围F3:F8列宽为1,要从‘1份’变成‘4份’,电脑并不拒绝操作。17.刚才的操作,其实相当于把F3:F8数据复制多个(即数组扩展),然后再进行挑选。在Excel7中数组对于两边大小不一的运算时,都会扩展以适应,但是超过2维,扩展是以错误值扩展的,所以一般避免这种有错误值情况的发生。18.单行或单列数组可以正确扩充,对于1个常数(数字、文本等),相当于特殊的单行或单列,所以同样会扩充,如图所示,。8第四回多个阉割式if({1,0},xxx,)拼合数组19.前面讲了用阉割式if({1,0},xxx,)挑选数组的方法,实质是从一个数组中选择某些部分,能否再选择另一个数组选择另一部分,然后‘阴阳互补’式的拼成一个新数组呢?这是可以的。如图这例中,{1,0}和{0,1}刚好相反。20.此例同样,两个数组选择区域的{1,0……}刚好相反。21.既然可以由两部分组合,当然也可以用三部分甚至更多的部分“&”并成。922.上图公式较长,但思路相当浅显,举例第一个分句,在m11:o16的范围内用{1,0,0}选出第一列,然后仿此,在其他地方选出几列,最后并集起来。形象比喻一下相当于几个人铺地砖,第1个人跳着铺了部分,第2个人铺前面留下的空档,第3个接下铺前面剩的空档,铺的原则是不允许有‘重叠’。抽象点看,就是{1,0,0}+{0,1,0}+{0,0,1}={1,1,1},拼砖成功。23.不过,上图这个公式是局限,假如拼‘中’这块板,需要是A列,公式中{0,1,0}的‘1’对应A列,但A列已经是最靠前的列,之前就没有了,所以这一步完成不了。24.解决的方法,异常简单,就是数组单行单列的扩展,不去考虑实际引用范围,输入单列就行了,如图所示。25.再一例拼板,图中是按1-2-3-4-5这样顺序提取数据拼板,其中3和5是同一列数据。公式可以写成这样,因为2-3-4这几列是连续的,所以注意我这里写的是{0,1,1,1,0},对应区域跟着作相应变化。1026.拼块构成数组时,也别忘了,如果对象全部纯粹是数字,可以直接相乘再相加,如图所示。27.本回总结:a)这种‘拼板’式的组合数组只是一个基础方法,虽不是最优化的办法,但确是个‘万能’的办法,具体操作中有可能公式写得老长,但仔细分解一下,思路相当地简单明了。b)这种操作思路,一定要考虑数组长度问题,根据数组最后有多宽,再回头确定{1,0,……},空缺的部分用0补足。c){1,0,……}这种长串形式,受太极八卦图的启发,体现出一种‘阴阳互补’思路,如果有多个部分,则几部分的{1,0,……}相加,应得到{1,1,1,1,1……},也可以说是铺地砖的思路。d)用“&”并合,会把数字格式的‘数据’变成文本格式的‘数据’。e)这类公式中,if({1,0},xxx,yyy)这种结构,其实阉割了半截没用。能否让公式简化呢,就不能‘太监’了,请看下一回。11第五回从数组的角度理解if({1,0},xxx,yyy)28.先看把if({1,0},xxx,yyy)简化一下,变成if(1,xxx,yyy)和if(0,xxx,yyy),如图所示,这个相当简单浅显,可以理解成{1,0}变成1或0,得到长度为“1”的数组。29.当然,在数组扩展情况下,设置多长的区域,数组会扩展重复。30.理解if({1,0},xxx,yyy),可以看成,因为{1,0}的长度为2,运算过程中,第1步就是产生长度为2的数组(h3:h7本身长度为‘1’,要放进长度为‘2’的数组中,这里就发生了扩展,重复2个h3:h7内容,如图所示第1步),然后根据{1,0}的选择(图中第2步),得到结果(图中第3步)。1231.同理,if({0,1},xxx,yyy)也这样理解。32.最后,把这两个子公式合并,=IF({1,0},H3:H7,D3:D7),这就是这类结构的经典用法。33.需要注意的是,前面的例子中,这里的条件是相反的哦。1334.还是这个例子,还可以写成这样,只是把数据区域改变一下,但结果一样。这种没有数组的扩展的方法,前面已经提到,使用的可能有局限性(比如第2列恰好为a列数据),不如前面的方法。35.虽然结果一样,但计算过程中小细节却不尽相同,仿前,在第1步时,没有数组扩展,直接选择出h3:i7这部分,第2步通过{1,0}选择后就去掉了i3:I7的内容,最后得到跟前面一样的结果。14第六回从逻辑的角度理解if({1,0},xxx,yyy)36.上回提到的if({1,0},xxx,yyy)可以看作两作子公式合并而成,为什么呢?估计有些人并不能一下明白其道理,这回接着说。我们先回顾一下if()函数,它的结构是可以分解的。37.If(条件,事件1,事件2)中的“条件成立”则“事件1”,“条件不成立”则“事件2”。a)我们把“条件成立”表示为“a”,则“条件不成立”就是“非a”;b)“a”和“非a