You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DDMMYY格式月末日期排序异常问题及简化实现方案咨询

无需辅助列的排序实现方案

直接修改你的VBA代码即可实现正确排序,不用新增额外列,修改后代码如下:

Sub SortDates()
    Dim ActDate As Long
    Dim sheet As String
    Dim targetWs As Worksheet
    Dim headCell As Range
    
    sheet = "Overall Activity"
    Set targetWs = ThisWorkbook.Worksheets(sheet)
    
    ' 定位ActivityDate列
    With targetWs.Rows(1)
        Set headCell = .Find("ActivityDate", LookIn:=xlValues)
        If headCell Is Nothing Then Exit Sub ' 找不到对应列直接退出,避免报错
        ActDate = headCell.Column
    End With
    
    Dim dateRng As Range
    Set dateRng = targetWs.Columns(ActDate)
    ' 先批量把DDMMYY格式的内容转换为标准日期,不改变显示样式
    dateRng.TextToColumns Destination:=dateRng, DataType:=xlFixedWidth, _
        FieldInfo:=Array(0, xlDMYFormat)
    dateRng.NumberFormat = "DDMMYY" ' 保持原来的显示格式
    
    ' 执行排序,对整个使用区域排序避免单列排序打乱行数据对应关系
    targetWs.UsedRange.Sort Key1:=headCell, Order1:=xlAscending, Header:=xlYes
End Sub

实现说明

  1. 之前排序错误的原因是你把DDMMYY格式的内容当成普通数字/字符串排序,比较时会优先看前两位的日,自然会把上月月底日期排到当月日期后面
  2. 上面的代码用TextToColumns方法批量把列内容转换为Excel可识别的DMY格式日期,之后再排序就会按真实日期的先后逻辑处理,最后设置单元格格式为DDMMYY,显示效果和原来完全一致,用户感知不到变化
  3. 额外增加了列名找不到的异常判断,避免代码空跑报错

手动操作方案(无需写代码)

如果临时需要手动排序,也不用加辅助列:

  • 选中ActivityDate整列,点击「数据」选项卡→「分列」,连续点两次下一步,到第三步时列数据格式选「日期」,下拉选「DMY」,点完成
  • 直接对该列升序排序即可,排序完成后可以右键设置单元格格式,自定义为DDMMYY就能恢复原来的显示样式

内容的提问来源于stack exchange,提问作者Danny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 12:06:08