原创作者: 卢子 转自:Excel不加班
学员的问题,要计算每个周期的验收费用。
死了不少脑细胞,终于研究出来。
=IFERROR(VLOOKUP($C3,'发电量-万千瓦时'!$D:$CS,MATCH(TEXT($I3,"yymm")*1,'发电量-万千瓦时'!$D$3:$CS$3,0) COLUMN(A1)*12-12,0)/DAY(EOMONTH($I3,0))*(DAY(EOMONTH($I3,0))-DAY($I3) 1) SUM(OFFSET('发电量-万千瓦时'!$D$3,MATCH($C3,'发电量-万千瓦时'!$D$4:$D$80,0),MATCH(TEXT($I3,"yymm")*1,'发电量-万千瓦时'!$D$3:$CS$3,0) COLUMN(A1)*12-12,1,11)) VLOOKUP($C3,'发电量-万千瓦时'!$D:$CS,MATCH(TEXT($I3,"yymm")*1,'发电量-万千瓦时'!$D$3:$CS$3,0) COLUMN(A1)*12,0)/DAY(EOMONTH($I3,0))*(DAY($I3)-1),"")
公式超级复杂,今天就拿里面一部分内容进行说明。
原表格比较复杂,这里进行简化,发电这个表,第一行4位数是代表年月,2位数的年 2位数的月。
现在要根据客户、日期两个条件,统计第1年到第4年的对应金额。
现在以卢子4、2015/7/31这个来进行说明如何计算。先看客户在A列中第几行,再看日期在第一行中第几列,知道行列数后,将右边这12个月的数据求和就是第1年。第2年就再向右12列,再求12个月,依次类推。
这已经在原来的基础上,简单了一半以上,希望你没看晕。
获取排位,可以用MATCH。
客户第几行:
=MATCH($A2,发电!$A$2:$A$15,0)
这已经在原来的基础上,简单了一半以上,希望你没看晕。
获取排位,可以用MATCH。
客户第几行:
=MATCH($A2,发电!$A$2:$A$15,0)
TEXT将日期转变成4位数的年月格式,因为是文本格式,在前面加--转换成数值格式。
获取行列的交叉的第一个单元格的值。
=OFFSET(发电!$A$1,G2,H2)
获取行列的交叉的第一个单元格的值,再向右得到12列。不能直接回车,只能放在编辑栏,因为这是12个金额。一个单元格容纳不了,会出错。
=OFFSET(发电!$A$1,G2,H2,1,12)
再对这12个数字进行求和。
=SUM(OFFSET(发电!$A$1,G2,H2,1,12))
再将原来辅助列的公式,替换进去,这样第1年的总金额就出来了。
=SUM(OFFSET(发电!$A$1,MATCH($A2,发电!$A$2:$A$15,0),MATCH(TEXT($B2,"yymm")*1,发电!$B$1:$BU$1,0),1,12))
第2年,在这个基础上向右12行,第3年,在这个基础上向右24行……
这个可以借助COLUMN*12获取。
=COLUMN(A1)*12
第1年不需要向右,也就是0,将公式略作改动就可以从第1年开始向右拖动公式。
=COLUMN(A1)*12-12
最后,将这个也替换进去,大功告成。
=SUM(OFFSET(发电!$A$1,MATCH($A2,发电!$A$2:$A$15,0),MATCH(TEXT($B2,"yymm")*1,发电!$B$1:$BU$1,0) COLUMN(A1)*12-12,1,12))
即便是高手,写超级复杂的公式也不是一次性写完,而是先完成某一部分公式,再将这些零散的公式拼凑而成。
,