根据列标题动态地对行值求和? - Excel

时间:2015-07-08 13:15:57

标签: excel excel-formula

需要在以下链接中发布的查询解决方案

http://www.mrexcel.com/forum/excel-questions/334740-dynamically-sum-row-values-based-column-headers.html

应将PersonWeek作为单独的列,并显示周数。

任务:根据列标题对行值进行动态求和?

1 个答案:

答案 0 :(得分:1)

在本网站上完整地重新发布问题是一种很好的形式;尽管如此:

您正在寻找的是相对简单的。有很多方法可以实现这一点,但我建议您使用“匹配”功能和“偏移”功能的组合。偏移功能基于给定的起点创建一个范围,如所示,以给定的高度/宽度向上/向下/向左/向右移动。例如:

  

=偏移(B2,1,2,3,4)

表示范围D3:G5。这是从单元格B2开始,向下移动1行,向右移动2列,总共3行4列的范围。

所以剩下的要点是确定从哪里开始和停止你的偏移。

首先,Offset函数中的第一个字段将是单元格A1,因为它是数据表的左上角。要查找要向下移动的行数,您需要找到您所指的项目(我将假设单元格A6是您输入您关注的项目名称的位置,A7是您输入您关注的第一周的位置,和A8是你进入你关心的最后一周的地方)。要查找从A1向下移动的行数,请使用匹配:

  

=匹配(A6,A2:A5,0)

要查找向右移动的列数以查找第一周,请再次使用匹配:

  

=匹配(A7,B1:G1,0)

假设您只想查看单个项目,我们知道我们希望范围有多高(1)。

要了解我们想要的范围有多广,我们需要知道您的结束周,而不是您的开始周:

  

=(匹配(A8,B1:G1,0)-Match(A7,B1:G1,0))

所以整个事情将是

  

=偏移(A1,匹配(A6,A2:A5,0),匹配(A7,B1:G1,0),1,匹配(A8,B1:G1,0) - 匹配(A7,B1:G1) ,0))

现在唯一剩下的就是将新定义的范围包装在'sum'函数中,如下所示:

  

=总和(偏移量(A1,匹配(A6,A2:A5,0),匹配(A7,B1:G1,0),1,匹配(A8,B1:G1,0) - 匹配(A7,B1) :G1,0)))

如果有人以表格中找不到的方式输入项目名称/周名,则此公式将产生错误 - 因此在单元格A6-A8中,您可能希望使用数据验证仅允许输入这些名称 - 如果您想详细说明,请与我联系。