VBA实现yyyymmdd格式文本日期转标准日期的方法咨询
VBA实现8位文本日期到
10 Jun 2022格式转换方案 完全可以通过VBA完成该格式转换,核心逻辑是拆分8位文本中的年、月、日字段,组装为合法日期类型后,指定英文月份缩写格式输出即可。
可用实现代码
1. 自定义调用函数
可以在VBA模块中粘贴以下代码,之后就能在Excel单元格里像普通公式一样调用,完成单个值的转换:
Function ConvertToEnDate(rawVal As String) As String ' 校验输入合法性 If Len(rawVal) <> 8 Or Not IsNumeric(rawVal) Then ConvertToEnDate = "输入格式错误" Exit Function End If ' 拆分年、月、日字段 Dim targetYear As Integer, targetMonth As Integer, targetDay As Integer targetYear = CInt(Left(rawVal, 4)) targetMonth = CInt(Mid(rawVal, 5, 2)) targetDay = CInt(Right(rawVal, 2)) ' 强制按英文格式输出,不受系统区域语言影响 ConvertToEnDate = Format(DateSerial(targetYear, targetMonth, targetDay), "dd mmm yyyy", vbEnglishUS) End Function
调用示例:如果A1单元格值为20220610,在其他单元格输入=ConvertToEnDate(A1)即可得到10 Jun 2022的结果。
2. 批量转换宏
如果需要批量处理某一选中区域的8位日期文本,可以使用以下宏,选中目标单元格区域后运行即可直接完成替换:
Sub BatchConvert8bitDate() Dim cell As Range ' 遍历选中区域所有单元格 For Each cell In Selection If VarType(cell.Value) = vbString And Len(cell.Value) = 8 And IsNumeric(cell.Value) Then Dim targetYear As Integer, targetMonth As Integer, targetDay As Integer targetYear = CInt(Left(cell.Value, 4)) targetMonth = CInt(Mid(cell.Value, 5, 2)) targetDay = CInt(Right(cell.Value, 2)) cell.Value = Format(DateSerial(targetYear, targetMonth, targetDay), "dd mmm yyyy", vbEnglishUS) End If Next End Sub
注意事项
- 代码中加入了输入合法性校验,非8位纯数字的内容不会被处理,避免误改其他单元格
- 输出时指定了
vbEnglishUS参数,不会因为系统/Office的默认语言是中文就输出中文月份缩写 - 批量操作前建议备份原始数据,避免操作失误导致数据丢失
内容的提问来源于stack exchange,提问作者PotatoPotate
相关产品推荐
相关产品推荐

