原创作者: 卢子 转自: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位数的月。

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(1)

现在要根据客户、日期两个条件,统计第1年到第4年的对应金额。

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(2)

现在以卢子4、2015/7/31这个来进行说明如何计算。先看客户在A列中第几行,再看日期在第一行中第几列,知道行列数后,将右边这12个月的数据求和就是第1年。第2年就再向右12列,再求12个月,依次类推。

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(3)

这已经在原来的基础上,简单了一半以上,希望你没看晕。

获取排位,可以用MATCH。

客户第几行:

=MATCH($A2,发电!$A$2:$A$15,0)

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(4)

这已经在原来的基础上,简单了一半以上,希望你没看晕。

获取排位,可以用MATCH。

客户第几行:

=MATCH($A2,发电!$A$2:$A$15,0)

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(5)

TEXT将日期转变成4位数的年月格式,因为是文本格式,在前面加--转换成数值格式。

获取行列的交叉的第一个单元格的值。

=OFFSET(发电!$A$1,G2,H2)

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(6)

获取行列的交叉的第一个单元格的值,再向右得到12列。不能直接回车,只能放在编辑栏,因为这是12个金额。一个单元格容纳不了,会出错。

=OFFSET(发电!$A$1,G2,H2,1,12)

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(7)

再对这12个数字进行求和。

=SUM(OFFSET(发电!$A$1,G2,H2,1,12))

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(8)

再将原来辅助列的公式,替换进去,这样第1年的总金额就出来了。

=SUM(OFFSET(发电!$A$1,MATCH($A2,发电!$A$2:$A$15,0),MATCH(TEXT($B2,"yymm")*1,发电!$B$1:$BU$1,0),1,12))

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(9)

第2年,在这个基础上向右12行,第3年,在这个基础上向右24行……

这个可以借助COLUMN*12获取。

=COLUMN(A1)*12

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(10)

第1年不需要向右,也就是0,将公式略作改动就可以从第1年开始向右拖动公式。

=COLUMN(A1)*12-12

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(11)

最后,将这个也替换进去,大功告成。

=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))

在excel里如何写复杂的公式(一个超级复杂的Excel公式)(12)

即便是高手,写超级复杂的公式也不是一次性写完,而是先完成某一部分公式,再将这些零散的公式拼凑而成。

,