Excel #价值!错误 - 但公式正确
Excel #Value! error - but correct formula
我有一个 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 月开始。确定月份后,我将尝试计算该期间的结束日期,考虑到一月、二月和三月实际上是财政年度的第 10、11 和 12 期,因此年份元素如果 CMVAR 显示日期在那些月份中的任何一个,则公式的末尾将是前一年。
是否有更好的方法来避免错误或修复它?
您的 EOMONTH 公式出错了,因为 TEXT 部分的格式应为 TEXT(date,"YYYY")。 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"))
对于 CMVAR
的不同值,您期望得到什么结果并不完全清楚,但看看您的公式,我想您希望它是:
您可以使用以下公式计算Result
:
=EOMONTH(CMVAR,-MAX(MOD(MONTH(CMVAR)-4,12),3))
如果上面的图片没有显示您预期的输出,请您准备类似的table?
编辑:
为了解释问题是如何解决的,我创建了额外的中间计算列:
- 列
C
是 CMVAR
和预期结果之间的月份差异 - 目标是找到返回此数字的公式
- 列
D
计算CMVAR的月份
- 列
E
- 函数 MOD
returns 数字后的余数除以除数 (12
)。
- 列
E
匹配 C
的所有值,除了 0
、1
、2
,所以在 F
列函数 MAX
将这些值替换为 3
我有一个 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 月开始。确定月份后,我将尝试计算该期间的结束日期,考虑到一月、二月和三月实际上是财政年度的第 10、11 和 12 期,因此年份元素如果 CMVAR 显示日期在那些月份中的任何一个,则公式的末尾将是前一年。
是否有更好的方法来避免错误或修复它?
您的 EOMONTH 公式出错了,因为 TEXT 部分的格式应为 TEXT(date,"YYYY")。 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"))
对于 CMVAR
的不同值,您期望得到什么结果并不完全清楚,但看看您的公式,我想您希望它是:
您可以使用以下公式计算Result
:
=EOMONTH(CMVAR,-MAX(MOD(MONTH(CMVAR)-4,12),3))
如果上面的图片没有显示您预期的输出,请您准备类似的table?
编辑:
为了解释问题是如何解决的,我创建了额外的中间计算列:
- 列
C
是CMVAR
和预期结果之间的月份差异 - 目标是找到返回此数字的公式 - 列
D
计算CMVAR的月份 - 列
E
- 函数MOD
returns 数字后的余数除以除数 (12
)。 - 列
E
匹配C
的所有值,除了0
、1
、2
,所以在F
列函数MAX
将这些值替换为3