如何用VBA宏将mmyy格式数字转换为mmm-yy日期格式?
VBA宏实现日期格式转换(mmyy数字转mmm-yy可排序日期)
核心思路
直接遍历选中区域的每个单元格,解析数字对应的年月,生成真正的日期值(支持排序),再设置单元格显示格式为mmm-yy,全程无需公式或辅助行。
完整VBA代码
Sub ConvertMMYYToDate() Dim cell As Range Dim inputNum As Long Dim monthNum As Integer Dim yearNum As Integer ' 遍历选中区域内的每个单元格 For Each cell In Selection ' 仅处理数字类型的单元格 If IsNumeric(cell.Value) Then inputNum = cell.Value ' 解析月份与年份:适配3位(如123=1月2023)、4位(如1222=12月2022)数字格式 If Len(inputNum) = 3 Then monthNum = Left(inputNum, 1) yearNum = Right(inputNum, 2) ElseIf Len(inputNum) = 4 Then monthNum = Left(inputNum, 2) yearNum = Right(inputNum, 2) Else ' 不符合格式的数字直接跳过,可按需添加提示逻辑 GoTo NextCell End If ' 生成日期值(固定用当月1号,不影响年月排序) cell.Value = DateSerial(2000 + yearNum, monthNum, 1) ' 设置单元格显示格式为mmm-yy cell.NumberFormat = "mmm-yy" End If NextCell: Next cell End Sub
使用步骤
- 选中需要转换的日期数字区域
- 按下
Alt + F11打开VBA编辑器 - 右键点击当前工作簿 → 插入 → 模块
- 将上述代码粘贴到模块窗口中
- 按下
F5运行宏,或返回Excel界面通过「开发工具」→「宏」选择ConvertMMYYToDate执行
补充说明
- 生成的是Excel原生日期值(底层为序列数),支持排序、筛选等所有日期类操作
- 自动跳过非数字单元格,避免运行报错
- 年份默认补为
20xx,若需支持19xx格式,可在代码中添加判断(例如:If yearNum > 50 Then yearNum = 1900 + yearNum Else yearNum = 2000 + yearNum)
内容的提问来源于stack exchange,提问作者cjohnson092
相关产品推荐
相关产品推荐

