【问题标题】:Dynamically select a column using month and year, then sumif the values based on criteria in another column使用月份和年份动态选择一列,然后根据另一列中的条件对值求和
【发布时间】:2019-01-27 17:46:28
【问题描述】:

这是我想要实现的目标的图像:

我不精通创建自己的 VBA 脚本,但如果有时间剖析,我可以理解其他人编写的代码。如果这个目标可以在没有 VBA 的情况下解决,那将是我的偏好。我已经使用INDEXMATCH 进行了探索,但一无所获。有什么建议?

我使用的是 Excel 2013。

【问题讨论】:

  • 请提供您希望获得的图片和详细信息。
  • 我的目标和例子都在图片中。
  • 列选择应该不会太糟糕,考虑到您每年使用 n=12 个条目...从技术上讲,您可以使用 0 = 2018、1 = 2019 等,*n+ n 找到正确的列,只需要读取月份行。关于要总结的其他列标准......您需要提供更多信息。
  • 感谢您的回复,西里尔。您还需要什么其他信息?我只想总结所选月份和年份的所有“计划”单元格。我也会为“实际”做同样的事情。 “另一栏的标准”是指C栏的“计划”和“实际”。

标签: vba excel excel-formula excel-2013


【解决方案1】:

查找正确列的示例,如我的评论中所述(未经测试的代码):

arr = array("Jan","Feb") 'you can do the rest
x = 2018 'first year in question, to make the math easier
s = 4 'column your first month is in
y = cells(1,2).value - x
z = application.match(left(cells(1,1).value,3),arr,0)
'all that gets you to:
c = s+(y*12)+z

然后您可以使用最后的列号 c 来执行 Application.Sumifs(),您可以在其中指定实际/计划作为您的标准之一。

【讨论】:

  • 西里尔,感谢您的回复。我选择使用另一种解决方案,因为它使我无法使用 VBA。一旦我在 VBA 方面变得更好,我肯定会考虑像你这样的解决方案。再次感谢!
【解决方案2】:

我会“作弊”

我的月份列表在 AI1:AI12 中,年份列表在 AJ1:AJ2 中(分别用于 A1 和 B1 中的下拉菜单)。将它们移到别处更长的时间。

然后在A2:

=MATCH(A1,AI1:AI12,0)

B2:

=IF(MATCH(B1,AJ1:AJ2,0)=1,0,12 *( MATCH(B1,AJ1:AJ2,0)-1))

D1O 中拖动到AA10

=SUMIF($C$3:$C$8,"Plan",D3:D8)

注意:您可以删除硬编码的“计划”并改为引用一个单元格。

结果为@​​987654332@

=OFFSET(D10,,B2+A2-1,1,1)

您基本上是在使用一个公式来确定从第 1 个月、第 1 年偏移多远,以获得第 10 行中的当前月份和年份条件总和。

【讨论】:

  • QHarr:非常感谢您的回复。它对我有用!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多