前几天小必老师无意中做到了一个题目,是关于一个查询的问题,其中这个查询呢,是带有合并单元格的。下面的问题仅提供于训练函数的解决思维,实际工作中可提供自身的情况选择适合自己的一些就方法。
题目:按右边的要求进行交叉匹配查找。如下图所示:
解释:
以下解释皆以G3单元格中的公式为例:
1、LOOKUP函数使用了其向量形式,即在单行区域或单列区域(称为“向量”)中查找值,然后返回第二个单行区域或单列区域中相同位置的值。 具体语法为:
LOOKUP(lookup_value, lookup_vector, [result_vector]),
如果 LOOKUP 函数找不到 lookup_value,则该函数会与 lookup_vector 中小于或等于 lookup_value 的最大值进行匹配。
2、ROW($2:$13)是生成一个常量数组即:{2;3;4;5;6;7;8;9;10;11;12;13};
($A$2:$A$13<>””)则生成一个与常量数组相同的尺寸的由逻辑值组成的数组
{TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE};
ROW($2:$13)/($A$2:$A$13<>””)是根据逻辑值与数值的转化关系TRUE=1,FALSE=0,两者相除可以得成到一组由数字与逻辑值构成的数组:
{2;#DIV/0!;#DIV/0!;#DIV/0!;6;#DIV/0!;8;#DIV/0!;#DIV/0!;11;#DIV/0!;#DIV/0!};
然后使用LOOKUP查找,即完成的运算为:
=LOOKUP({2;3;4;5;6;7;8;9;10;11;12;13},{2;#DIV/0!;#DIV/0!;#DIV/0!;6;#DIV/0!;8;#DIV/0!;#DIV/0!;11;#DIV/0!;#DIV/0!},{“成1″;0;0;0;”成2″;0;”成3″;0;0;”成4”;0;0})
上面这一步骤最终的结果为:
{“成1″;”成1″;”成1″;”成1″;”成2″;”成2″;”成3″;”成3″;”成3″;”成4″;”成4″;”成4”}
即在数组公式里面将合并单元格进行了完成的填充。
3、接上面的步骤,接下来就是返回同时符合两个条件的结果。在公式与函数中,AND函数是用来表示两个条件的同时成立的函数,比如A,B两个条件同时成立可以写成:A And B,而条件是否成立的结果只有两个,成立则返回TRUE,不成立则返回FALSE,再根据逻辑值与数值互换的关系,TRUE=1,FALSE=0,那么根据这个原理,可以将条件同时成立等价于条件相乘不等于0;不成立则为条件相乘等于0,即条件1*条件2*……*条件n,如果成立那么则返回结果为1,即TRUE,否则返回结果为1,即为FALSE。
本题中:
=SUMPRODUCT(({“成1″;”成1″;”成1″;”成1″;”成2″;”成2″;”成3″;”成3″;”成3″;”成4″;”成4″;”成4″}=”成1”)*({“A-1″;”A-3″;”A-2″;”A-4″;”A-1″;”A-2″;”A-2″;”A-1″;”A-3″;”A-3″;”A-1″;”A-2″}=”A-1”)*{336;85;52;203;234;252;224;374;234;72;135;60})
根据条件是否成立可以转化为:
=SUMPRODUCT({TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}*{TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE}*{336;85;52;203;234;252;224;374;234;72;135;60})
对前两个乘数转化可得到:
=SUMPRODUCT({1;1;1;1;0;0;0;0;0;0;0;0}*{1;0;0;0;1;0;0;1;0;0;1;0}*{336;85;52;203;234;252;224;374;234;72;135;60})
然后再次转化:
=SUMPRODUCT({1;0;0;0;0;0;0;0;0;0;0;0}*{336;85;52;203;234;252;224;374;234;72;135;60})
最后使用SUMPRODUCT函数支持数组内部将乘积相加的功能返回相加的结果:
=SUMPRODUCT({336;0;0;0;0;0;0;0;0;0;0;0})
即将0与不为0的结果相加后得到结果为336.
注:以上的所有的过程揭示的是数组内部是如何进行运算的,属于高阶内容。小白朋友可做了解,尝涳度用户可以深入地拆分与学习,了解公式与函数的用法。