楼主 lrlxxqxa |
Q:如何根据多行多列条件进行查找引用并汇总计算? 问题描述:当“汇总计算表”中的E2、E3、E4三个条件等于“参考图”中的一二三行中的类型的时候,取“参考图”中符合条件的列作为每米的计算数量,然后在“汇总计算表”中求各个项的和。也就是说当附件中围岩级别、衬砌类型和加宽值变化时候,求和时每延米数量分别变化,如何实现? 参考图如下所示: 汇总计算表如下所示: A:解决方案: 为了应对合并单元格,创建辅助列: 参考图T4
汇总计算表H5
汇总计算E5数组
公式思路及算法解析: 根据参考图及汇总计算要求得出:汇总计算结果=每延米数量*计算长度,其中计算长度,我们可以很方便的引用E$1和F$1单元格,注意填充公式时要进行行绝对引用;关键问题在于如何根据物料名称及规格查找调用出相应的每延米数量。我们拟利用index函数实现此目的。 最终的公式看起来比较长,我们把它拆分成几个部分一一来看: 1、index第1参数:参考图!$F$1:$S$51,不多说了,这是需要调用的数据区域; 2、index第2参数:如果直接使用MATCH($A5&$B5&$C5,参考图!$A$1:$A$51&参考图!$B$1:$B$51&参考图!$C$1:$C$51,),会有部分单元格返回错误,观察后发现这是由于表内存在合并单元格所致(下图红框处),所以我们利用联接三个条件列构建辅助列,利用match函数进行精确查找; 3、再来看下index第3参数:MIN(IF(MMULT(TRANSPOSE(N(E$2:E$4=参考图!$F$1:$S$3)),{1;1;1})=3,ROW($1:$14))),其返回的是拟查找数据所在的列数; 我们要将“汇总计算”工作表的$2:$4行中的3个条件值从“参考图”工作表的$1:$3行中精确查找3条件同时匹配的列,这时我们很自然想到了mmult这个矩阵函数。只要将其第一参数依照3条件构建一个内存数组,第二参数使用常量数组{1;1;1}的形式进行行求和,结果为3时所对应的列就是我们需要查找的列数; 具体做法是:附图详见附件绿色区域 利用E$2:E$4=参考图!$F$1:$S$3构建一个3行14列内存数组,由逻辑值组成; 利用n函数将其转化为1和0组成的3行14列内存数组; 利用transpose函数完成转置,形成14行3列内存数组 最后利用index函数,在数据区域内根据返回的行、列调出相应的每延米数量,完成汇总计算。 aaalr修正.rar |
2楼 水之歌 |
来学习一下MM函数 |