Excel VBA自定义函数开发:转换特定格式日期为序列号
全局可用的Excel VBA自定义函数:转换UTC日期字符串为序列号
没问题,我来帮你搞定这个能全局调用的VBA函数,完美实现你要的日期转换逻辑,返回正确的Excel序列号。
实现步骤(确保全局可用)
要让函数在所有Excel文件里都能用,咱们得把代码放在**个人宏工作簿(Personal.xlsb)**里——这个工作簿会在Excel启动时自动加载,所有打开的文件都能调用它。如果还没创建过Personal.xlsb,先随便录制一个空宏(比如选中单元格点个加粗再取消),Excel会自动生成这个文件。
- 打开VBA编辑器:按下
Alt + F11快捷键 - 在左侧项目栏找到
Personal.xlsb(如果没显示,点击视图 -> 项目资源管理器) - 右键
Personal.xlsb,选择插入 -> 模块 - 把下面的代码粘贴到模块窗口里
自定义函数代码
Function ConvertUTCDateToSerial(dateStr As String) As Double ' 按照指定逻辑提取日期各部分 Dim daySegment As String Dim monthSegment As String Dim yearSegment As String Dim formattedDate As String ' 从输入字符串中提取对应片段(和你给出的公式逻辑完全一致) daySegment = Mid(dateStr, 8, 3) monthSegment = Mid(dateStr, 4, 4) yearSegment = Right(dateStr, 4) ' 拼接成DATEVALUE可识别的日期格式 formattedDate = daySegment & monthSegment & yearSegment ' 转换为Excel日期序列号并返回 ConvertUTCDateToSerial = DateValue(formattedDate) End Function
使用方法
保存模块后回到Excel,在任意单元格里输入:
=ConvertUTCDateToSerial(A2)
当A2单元格的值为Sun Apr 01 00:00:00 UTC 2018时,函数会直接返回43191——这正是2018年4月1日对应的Excel日期序列号,完全符合你的需求。
验证说明
你给出的公式逻辑是通过拼接字符串片段,再用DATEVALUE转换为序列号,这个VBA函数完全复刻了这个逻辑,确保结果一致。如果后续遇到其他格式类似的UTC日期字符串,只要结构和示例一致,这个函数也能正常工作。
内容的提问来源于stack exchange,提问作者Matan Retzer




