ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1852|回复: 7

[求助] 关于MONTHH函数在VBA和EXCEL中的值不一样

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-13 19:55 | 显示全部楼层 |阅读模式
各位大侠 :
    MONTH 函数在VBA 和 EXCEL中的值为啥不一样,百思不得其解 ,请大家帮忙解惑 ,谢谢

month函数.rar

16.38 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2018-9-13 20:49 | 显示全部楼层
你的附件里哪来VBA代码,况且从截图看,VBA是显示值,而不是显示月份啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-14 09:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一剑惊心 发表于 2018-9-13 20:49
你的附件里哪来VBA代码,况且从截图看,VBA是显示值,而不是显示月份啊

对不起,在保存的时候版本不一样,没有保存到
Sub MONTHTEST()
MsgBox "A1单元格的值为:" & Month([a1])
End Sub
谢谢

TA的精华主题

TA的得分主题

发表于 2018-9-14 09:22 | 显示全部楼层
这种问题,你觉得有关系吗?

a1 是空,根本就不是日期格式啊,何来月份呢

就是函数算出的是1,你觉得这个1是对的吗?


Sub a()
If IsDate([a1]) Then
    MsgBox Month([a1])
Else
    MsgBox "不是日期"
End If
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-14 10:36 | 显示全部楼层
魂断蓝桥 发表于 2018-9-14 09:22
这种问题,你觉得有关系吗?

a1 是空,根本就不是日期格式啊,何来月份呢

收益非浅,但是我在单元格那里按日期格式设定的 ,[A1]即是空的话 ,它的格式依然是1900/1/0 ,不知道我这样的理解有没有问题 ,在VBA中的值应该是“1”

TA的精华主题

TA的得分主题

发表于 2018-9-14 10:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 小fisher 于 2018-9-14 11:02 编辑

Excel中日期以1900-1-00 0:00:00为分界点,VB中日期以1899-12-30 0:00:00为分界点,在内存中表示为一个双精度浮点 数(Double类型),整数部分表示分界点以后的天数,小数部分是时、分、秒,1=24小时=1440分=86400秒。
例如,数字1.5在excel中表示的日期是1900-1-1 12:00:00(在单元格中输入1.5,然后把单元格格式设置为"yyyy-mm-dd h:mm:ss");而数字1.5在VBA中表示的日期则是1899-12-31 12:00:00,用CDate(1.5)或format(1.5, "yyyy-MM-dd hh:mm:ss")。同样的数字,用两种日期表示会相差1天,遇到月底月初会落到不同的月份。

excel运算中,空白单元格a1会被当作数字0处理,所以,Excel函数=month(a1)返回1月份,而VBA中month([a1])返回12月份。这是对楼主问题的解答。

有趣的是,在1900-3-1日之后却不再存在这1天的差异,原因是VBA日期中没有1900-2-29这个日期,而excel日期中有(以00结尾的年份,必须能被400整除才是闰年,所以1900年2月是没有29日的,这个和1900年1月0日一样,应该是excel日期的bug),数字60、61在VBA中分别表示1900-2-28和1900-3-1,而在Excel中则分别表示1900-2-29和1900-3-1。

TA的精华主题

TA的得分主题

发表于 2018-9-14 11:19 | 显示全部楼层
再补充一下网上看到的关于excel中存在的1900年3月1日前日期存在bug的解释,这个bug源自Lotus 1-2-3,微软早就知晓这个问题,早期为了和Lotus 1-2-3兼容并抢占市场,后期为了避免修复bug造成之前已产生的大量excel文件出错,所以一直沿用了这个bug。对于1900-3-1之前的日期,excel的相关日期函数比如weekday都有可能给出错误结果。但是VBA中的相关日期函数不存在这个问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-14 20:30 | 显示全部楼层
小fisher 发表于 2018-9-14 10:42
Excel中日期以1900-1-00 0:00:00为分界点,VB中日期以1899-12-30 0:00:00为分界点,在内存中表示为一个双精 ...

谢谢 ,豁然开朗 ,感谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-15 14:14 , Processed in 0.022277 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表