使用月份和年份动态选择一列,然后根据另一列中的条件求和

时间:2018-08-21 13:55:16

标签: excel vba excel-vba excel-formula excel-2013

以下是我要实现的目标的图像:

我对创建自己的VBA脚本并不精通,但是如果有时间进行剖析,则可以理解别人编写的代码。如果没有VBA就能解决这个目标,那是我的偏爱。我已经探索过使用INDEXMATCH的方法,但是却一无所获。有什么建议么?

我正在使用Excel 2013。 Corrected image here

2 个答案:

答案 0 :(得分:3)

我会“作弊”

我的月份列表位于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)

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

使用

生成C1的结果
=OFFSET(D10,,B2+A2-1,1,1)

DATA

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

答案 1 :(得分:0)

根据我的评论(未测试的代码)所述找到正确列的示例:

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(),在其中您将实际/计划指定为条件之一。