Excel多级数组公式与部分字符串匹配以对结果单元格求和

Excel多级数组公式与部分字符串匹配以对结果单元格求和,excel,array-formulas,Excel,Array Formulas,一天多来,我一直在努力解决这个问题,但运气不好。我以前成功地使用过SUMIFS、INDEX、MATCH、COUNTIF、“--”等数组函数,我不是新手,但也不是这方面的专家。我似乎无法正确地将它们编织在一起,而且很可能走上了一条完全错误的道路 基本上,我正在尝试从多个电子表格中聚合数据,需要将各种项目(行)映射成一种规范形式进行汇总 这里的图片显示了我的任务的一个代表性的简化版本。本示例电子表格(最终…、映射、数据集1、数据集2)上的每个“区域”实际上位于不同的电子表格中,每个xlsx中有多个表

一天多来,我一直在努力解决这个问题,但运气不好。我以前成功地使用过SUMIFS、INDEX、MATCH、COUNTIF、“--”等数组函数,我不是新手,但也不是这方面的专家。我似乎无法正确地将它们编织在一起,而且很可能走上了一条完全错误的道路

基本上,我正在尝试从多个电子表格中聚合数据,需要将各种项目(行)映射成一种规范形式进行汇总

这里的图片显示了我的任务的一个代表性的简化版本。本示例电子表格(最终…、映射、数据集1、数据集2)上的每个“区域”实际上位于不同的电子表格中,每个xlsx中有多个表格,有50-150行

请注意,B列中的名称非常任意(这意味着并非所有P1都有“x”模式,如图中所示x1、x2等。不依赖名称中的任何模式,映射表中的x、y、z是数据集中B列中名称的子字符串(不区分大小写,尾随匹配)

在图中,最终结果表(手动求和)是我想要通过(数组)公式计算的:一个公式将是理想的(因为我有许多从中提取月度数据的电子表格,所以我无法随时修改,但如果需要,可以创建一个临时电子表格,以便打开辅助列或辅助行)

以下是过程-对于最终结果表中的每个名称(B3-B5),我想将其组件中的名称相加如下:

  • 查找映射表中的所有匹配项(因此对于P1,公式=IF($C$10:$C$15=$B3,$B$10:$B$15,”)给出{“x1”;“x2”;“x3”}
  • 然后,我想搜索B19:B26中的x1、x2和x3,以获得数据集1中的第21、22、24、25、26行,以及B31:B35,以获得数据集2中的第32行,然后将1月份的总数相加到C3中。(实际上, C3=C21+C22+C24+C25+C26+C32)。P2和P3和至2月、3月
  • 我一直在研究如何从2的中间结果中删除blank、0、Div0或类似的“错误行”,还需要使用两个不同大小的数组(上面示例2中的3个有效行,忽略空格)来搜索数据集中的许多行。我尝试了搜索(“*”&IF($C$10:$C$15=$B3,$B$10:$B$15,”),$B$19:$B$26)但是得到了意外的结果。我试图用TRUE/FALSE和1/0等替换中间结果{“x1”;“x2”;“x2”;“x3”}中的文本,以帮助索引或匹配,但由于下游(“周围”)公式中的错误而受阻


    提前感谢。

    这是一个很好的挑战!您是否愿意将所有表(数据集1、数据集2…)放入一个电子表格中,以便我们每个月只参考一个范围

    这里有一个解决方案(希望是一个很好的起点)-数组公式(Ctrl+Shift+Enter):

    =SUMPRODUCT(IFERROR(IF(转置)(IF($B3=$C$10:$C$15,$B$10:$B$15,”)))=右($B$18:$B$36,2),C$18:C$36,0),0))


    这里有一个解决方案,不必求助于讨厌的(imo)CSE公式

    =  SUMPRODUCT($C$19:$F$26*(COUNTIFS($B$10:$B$15, RIGHT($B$19:$B$26,2),$C$10:$C$15,$B3)>0)*($C$18:$F$18=C$2))
       +
       SUMPRODUCT($C$31:$F$35*(COUNTIFS($B$10:$B$15, RIGHT($B$31:$B$35,2),$C$10:$C$15,$B3)>0)*($C$30:$F$30=C$2))
    
    每个数据集都有一个
    SUMPRODUCT
    。如果可能,最好将所有数据集放在一个带有列的表中,以确定它是哪个数据集的一部分

    它的工作方式是获取数据集中的每个值,然后将其乘以该p代码的映射表中是否出现最右边的2个字符,再乘以该值是否在正确的月份。因此,如果其中一个条件为false,则返回0。然后返回总和

    根据OP评论进行更新

    如果X、Y、Z代码并非始终为2位,但第一部分始终为8位,则可以轻松修改:

    RIGHT($B$19:$B$26,2)
    
    将是:

    RIGHT($B$19:$B$26,LEN($B$19:$B$26)-8)
    
    为第一个数据集生成公式:

    =SUMPRODUCT($C$19:$F$26*(COUNTIFS($B$10:$B$15, RIGHT($B$19:$B$26,LEN($B$19:$B$26)-8),$C$10:$C$15,$B3)>0)*($C$18:$F$18=C$2))
    

    您可以修改其他数据集,只需将它们添加到一起。

    太棒了,两个都很简单。都迫不及待地想尝试一下(我会花几个小时)。但有两个“问题”需要注意:从右到右,x/y/z不是2个字符,实际上是可变长度,而是前缀(100-),等等)在原始数据中正好是8个字符。此外,按照Gravitate的建议将所有数据合并到一个xls或“表”中并不实际。但我可以在公式的每个单元格中对文件进行不同的引用(2018和2019的月份不是过多的列)。我的意思不是说“简单”。优雅可能是一个更好的词。无论如何,希望尽快尝试这些。嘿@retd111很抱歉有一点耽搁,圣诞节期间可能会很吸引人!:)对于正确,我认为你可以尝试使用
    正确($B$18:$B$36,LEN($B$B$18:$B$B$36)-9)
    而不是
    正确($B$18:$B$36,2)
    (9=8字符加“-”符号的前缀)。我想知道这个解决方案是否有用(祈祷吧!)。这个公式非常有效。是的,我已经使用了正确的调整。有很多。一个怪癖是,我有2-4个不相交的范围,所以有很多SUMPRODUCTS(例如SP()+SP()+SP()),这是很多重复。但是,我没有抱怨。两个公式都很好。两个解决方案都可以在测试电子表格上使用。我将很快处理主数据集。但非常感谢。如果出现问题,我将返回。