如何在 Excel 中对 3 种不常见的日期类型进行排序?

如何在 Excel 中对 3 种不常见的日期类型进行排序?

我的 excel 文件中有 3 种类型的日期。这些日期包括上述内容:Q(季度)、Apr(月份的缩写或缩写名称)、April(月份的全名)。这些日期与四位数年份相结合,并在我的 Excel 文件中将年份的一部分显示为日期。现在我想在我的 excel 文件中对这 3 种类型的日期进行排序。
例如:
在此处输入图片描述

我需要先将所有四位年份向左移动,然后按季度或月份的全名或简称从下到上排序。

我把这个例子放在这里:

Q1 2022
2000 November
2024 Q3
Apr 2010
Q2 2022
2015 Jan
March 2005
2024 Q4
May 2010
2015 Feb
2000 October
April 2005

注意:1)我的文件中总是有这三种类型的年份划分 2)我无法手动执行此操作,因为我可能有太多文件。或者列中有许多分区
我怎样才能做到这一点?

答案1

对于真正需要根据数字的位置交换字符串中的两个单词的情况,用户定义函数 (UDF) 代码非常简单:

Function OrderWords(sWord As String) As String
Dim aTemp As Variant
    OrderWords = Trim(sWord)
    aTemp = Split(sWord, " ")
    If UBound(aTemp) = 1 Then
        If IsNumeric(aTemp(1)) Then OrderWords = aTemp(1) & " " & aTemp(0)
    End If
End Function

结果 1

如果要获取每一行的日期范围,那么该函数会更长一些:

Function ParsePeriods(sWord As String) As Variant
Dim aTemp As Variant
Dim nYear As Integer
Dim sPeriod As String
Dim aRes(1 To 2) As Variant
    ParsePeriods = OrderWords(sWord)
    aTemp = Split(Trim(sWord), " ")
    If UBound(aTemp) <> 1 Then Exit Function
    If IsNumeric(aTemp(1)) Then
        nYear = CInt(aTemp(1))
        sPeriod = Left(Trim(aTemp(0)), 3)
    Else
        nYear = CInt(aTemp(0))
        sPeriod = Left(Trim(aTemp(1)), 3)
    End If
    Select Case sPeriod
        Case "Q1"
            aRes(1) = DateSerial(nYear, 1, 1): aRes(2) = DateSerial(nYear, 3, 31)
        Case "Q2"
            aRes(1) = DateSerial(nYear, 4, 1): aRes(2) = DateSerial(nYear, 6, 30)
        Case "Q3"
            aRes(1) = DateSerial(nYear, 7, 1): aRes(2) = DateSerial(nYear, 9, 30)
        Case "Q4"
            aRes(1) = DateSerial(nYear, 10, 1): aRes(2) = DateSerial(nYear, 12, 31)
        Case "Jan"
            aRes(1) = DateSerial(nYear, 1, 1): aRes(2) = DateSerial(nYear, 1, 31)
        Case "Feb"
            aRes(1) = DateSerial(nYear, 2, 1): aRes(2) = Application.WorksheetFunction.EoMonth(aRes(1), 0)
        Case "Mar"
            aRes(1) = DateSerial(nYear, 3, 1): aRes(2) = DateSerial(nYear, 3, 31)
        Case Else
            aRes(1) = "Write the rest of": aRes(2) = "the options yourself"
    End Select
    ParsePeriods = aRes
End Function

由于该函数返回两个值,因此您需要将其作为数组公式输入到两个相邻的单元格中,并按Ctrl+Shift+Enter

结果 2

第二种选择是更好的选择,因为使用第一种选择,你将无法获得屏幕截图中显示的结果 - 在排序时2005 年 3 月将低于2005 年 4 月因为“A”小于“M”。

相关内容