无VBA时在Excel中替代FYFinder自定义函数的方案咨询
替代VBA自定义函数FYFinder的无宏方案(Excel 2016/365)
需求回顾
需替代的FYFinder功能:
- 接收日期单元格引用或数值型日期
- 返回以每年10月1日为起始的财年
- 自动忽略时间部分
- 非数值输入返回
#VALUE!
一、Excel 2016兼容方案
基础优化公式
直接在单元格中使用以下公式,可满足所有需求:
=IF(ISNUMBER(A1), --(MONTH(A1)>=10) + YEAR(A1), #VALUE!)
ISNUMBER(A1)判断输入是否为数值型日期(Excel日期本质是序列化数值)--(MONTH(A1)>=10)将布尔判断结果转为1(10月及以后)或0(1-9月),实现财年的年份偏移- 非数值输入直接返回
#VALUE!,完全匹配原函数逻辑
严谨日期验证版(可选)
若需排除纯数字但非有效日期的输入,可添加ISDATE验证:
=IF(ISNUMBER(A1)*ISDATE(A1), --(MONTH(A1)>=10) + YEAR(A1), #VALUE!)
解决自定义名称灵活引用问题(Excel 2016)
Excel 2016不支持LAMBDA,但可通过相对引用自定义名称实现类函数调用:
- 打开「公式」→「名称管理器」→「新建」
- 名称设为
FYFinder,引用位置输入:=IF(ISNUMBER(INDIRECT("RC",FALSE))*ISDATE(INDIRECT("RC",FALSE)), --(MONTH(INDIRECT("RC",FALSE))>=10) + YEAR(INDIRECT("RC",FALSE)), #VALUE!) - 使用时,在目标单元格输入
=FYFinder即可自动引用当前单元格;若需指定其他单元格,可改为=FYFinder(A1)
二、Excel 365专属优化方案
利用365的LAMBDA函数创建真正的无宏自定义函数,完全复刻原VBA函数的调用体验:
步骤1:注册自定义函数
- 打开「公式」→「名称管理器」→「新建」
- 名称设为
FYFinder,引用位置输入:=LAMBDA(input, IF(ISNUMBER(input)*ISDATE(input), --(MONTH(input)>=10) + YEAR(input), #VALUE!)) - 点击确定完成注册
步骤2:调用自定义函数
在任意单元格中直接使用:
=FYFinder(A1)
支持任意单元格引用、批量填充,行为与原VBA函数完全一致。
内容的提问来源于stack exchange,提问作者ayirtrebor
相关产品推荐
相关产品推荐

