【问题标题】:Sorting English Style dates排序英式日期
【发布时间】:2014-06-25 22:10:13
【问题描述】:

我有一个宏,它使用列 A 以升序对一组列进行排序,列 A 中包含英文格式的日期和时间。表格中的每个数据选择涵盖两天。这很好并且工作正常,直到月份发生变化,此时 30/04/2014 被视为大于 01/05/2014 的值。此时 01/05/2014 行被放在顶部,30/04/2014 被排序到底部,这与我想要的相反。

这是进行排序的代码的 sn-p。

With Range("AA1")
        .Value = 1
        .Copy

        'Modified the value conversion section to avoid changing the date to an american format

        With Range("B1:Z" & WriteToRow - 1)
            .PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply
        End With
        With Range("A1:Z" & WriteToRow - 1)
            .Sort key1:=Range("A2"), order1:=xlAscending, Header:=xlYes
            .EntireColumn.AutoFit
        End With

        .Value = ""

有人可以帮忙吗?我以为我可以添加一个 IF 语句 来说明 A2 的前 2 个字符是否为 01,然后按降序排序,但是我需要另一个 IF 来说明如果前两个字符是 02 排序 再次升序,以便在每个月的 1 日和 2 日之间处理文件时,顺序是正确的。这对我来说似乎有点乱,所以我想我会看看是否有人比我聪明得多,有一个更清洁的解决方案。

谢谢,7's

【问题讨论】:

  • 如果排序是这样的。这些不是日期,而是看起来像日期的字符串,请尝试在它们上使用 DATEVALUE()
  • 这也太简单了!不敢相信我没看到!感谢您的清新外观。
  • 是的,如果它们是 all 英式日期,那么您可以使用=DateValue(Text(A1,"DD-MM-YYYY"))。需要注意的一件事是,有时 Excel 会试图比用户更聪明,它会将英文日期(01/05/2014 - 5 月 1 日)解释为美国日期(1 月 5 日)。
  • @DavidZemens Excel 的解释取决于控制面板中指定的用户系统区域设置。
  • @Cor_Blimey 是的,这就是问题所在,因为像“01/05/2014”这样的值在英国或美国地区都是 有效 日期,但可以解释根据设置不同而有所不同,例如从文本导入时等。如果日期在英国语言环境下键入、保存,然后在美国语言环境中重新打开,这应该不是问题,但在某些情况下可以很麻烦。

标签: sorting date excel vba


【解决方案1】:

即使控制面板设置为正确的区域设置或语言,开发人员也可能来自完全不同的位置,处理来自不同国家的项目。

很高兴阅读所有专家的不同观点。要覆盖 OS 或 Excel Intelligence 确定日期格式,最好使用“=Text”命令对其进行格式化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2017-09-07
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    相关资源
    最近更新 更多