我有一个Excel 2010工作簿,其中包含以下公式:
=EOMONTH("01"&TEXT(B7,"MMM")&IF(MONTH(CMVAR)<4,TEXT(YEAR(CMVAR)-1,"YYYY"),TEXT(YEAR(CMVAR),"YYYY")),0)
当您在单元格中并按Enter键时它会解析,但是当工作簿首次打开或刷新时,结果为#VALUE!
。以下是组件:
B7 =IF(OR(MONTH(CMVAR)>6,MONTH(CMVAR)<4),"Apr",IF(MONTH(CMVAR)=4,TEXT(EDATE(CMVAR,-3),"MMM"),IF(MONTH(CMVAR)=5,TEXT(EDATE(CMVAR,-3),"MMM"),TEXT(EDATE(CMVAR,-3),"MMM"))))
等同于Apr
。
CMVAR 31/03/2015
正在使用该公式,因为在4月,5月,6月(前三个财政期间),我们要求比较数据显示在上一个财政年度的12期间网格中。从7月开始,我们将获得当年的可比数据,因此电网可以从4月开始。一旦确定月份,我试图弄清楚该期间结束的日期是什么,考虑到1月,2月和3月实际上是会计年度的10,11和12期,所以如果CMVAR显示在任何这些月份中的日期,公式的年份元素将是上一年。
有没有更好的方法来避免错误或修复方法?
答案 0 :(得分:1)
您对CMVAR
的不同值的期望结果并不完全清楚,但看看您的公式,我想您希望它是:
您可以使用以下公式计算Result
:
=EOMONTH(CMVAR,-MAX(MOD(MONTH(CMVAR)-4,12),3))
如果上面的图片没有显示您的预期输出,您可以准备类似的表吗?
修改强>
为了解释问题是如何解决的,我创建了其他具有中间计算的列:
C
是CMVAR
与预期结果之间的月差异 - 目标是找到返回此数字的公式D
计算CMVAR的月份E
- 函数MOD
返回数字除以除数(12
)后的余数。 E
匹配C
的所有值,0
,1
,2
除外,因此在列F
函数{{1}中用MAX
答案 1 :(得分:0)
您的EOMONTH公式出错了,因为TEXT部分的格式应为TEXT(日期,&#34; YYYY&#34;)。 YEAR(CMVAR)给出一个数字而不是一个日期。
您可以使用
=EOMONTH("01"&TEXT(B7,"MMM")&IF(MONTH(CMVAR)<4,TEXT(EDATE(CMVAR,-12),"YYYY"),TEXT(CMVAR"YYYY")),0)
或者这可能比使用TEXT函数
更容易=EOMONTH("01"&B7&IF(MONTH(CMVAR)<4,YEAR(CMVAR)-1,YEAR(CMVAR)),0)
你的B7公式没问题,但可以简化为
=IF(OR(MONTH(CMVAR)>6,MONTH(CMVAR)<4),"Apr",TEXT(EDATE(CMVAR,-3),"MMM"))