以下是我要实现的目标的图像:
我对创建自己的VBA脚本并不精通,但是如果有时间进行剖析,则可以理解别人编写的代码。如果没有VBA就能解决这个目标,那是我的偏爱。我已经探索过使用INDEX
和MATCH
的方法,但是却一无所获。有什么建议么?
答案 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)
您基本上是在使用公式来确定从第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(),在其中您将实际/计划指定为条件之一。