ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > 函数与公式 > 如何根据多行多列条件进行查找引用并汇总计算?

如何根据多行多列条件进行查找引用并汇总计算?

作者:绿色风 分类: 时间:2022-08-17 浏览:214
楼主
lrlxxqxa
Q:如何根据多行多列条件进行查找引用并汇总计算?

问题描述:当“汇总计算表”中的E2、E3、E4三个条件等于“参考图”中的一二三行中的类型的时候,取“参考图”中符合条件的列作为每米的计算数量,然后在“汇总计算表”中求各个项的和。也就是说当附件中围岩级别、衬砌类型和加宽值变化时候,求和时每延米数量分别变化,如何实现?

参考图如下所示:


 

汇总计算表如下所示:


 

A:解决方案:

为了应对合并单元格,创建辅助列:

参考图T4
  1. =LOOKUP(1,0/(A$4:A4<>""),A$4:A4)&LOOKUP(1,0/(B$4:B4<>""),B$4:B4)&LOOKUP(1,0/(C$4:C4<>""),C$4:C4)

汇总计算表H5
  1. =LOOKUP(1,0/(A$5:A5<>""),A$5:A5)&LOOKUP(1,0/(B$5:B5<>""),B$5:B5)&LOOKUP(1,0/(C$5:C5<>""),C$5:C5)


汇总计算E5数组
  1. =E$1*INDEX(参考图!$F$1:$S$51,MATCH($H5,参考图!$T$1:$T$51,),MIN(IF(MMULT(TRANSPOSE(N(E$2:E$4=参考图!$F$1:$S$3)),{1;1;1})=3,ROW($1:$14))))
右拖下拉填充即可。

公式思路及算法解析:

根据参考图及汇总计算要求得出:汇总计算结果=每延米数量*计算长度,其中计算长度,我们可以很方便的引用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函数

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap