根据生日排序excel

时间:2012-09-12 09:57:57

标签: excel vba excel-vba

如何根据excel表中的生日安排列表?

SLno    Name    rollnumber   birthday
______________________________________
1       aaa        45         august 25th
2       ddfg       87         april 2nd
3       poiu       98         january 4th 

在上表中我需要根据生日列更新列表吗? 预期o / p:

SLno    Name    rollnumber   birthday
______________________________________
1       poiu       98         january 4th 
2       ddfg       87         april 2nd
3       aaa        45         august 25th

4 个答案:

答案 0 :(得分:2)

最佳选择是为生日使用DateSerial个数字,格式化为您想要的显示。

如果您无法转换,请尝试此

添加一个带有公式的帮助列,将生日转换为DateSerial并对该列进行排序

公式(假设生日在列D中):

=DATEVALUE(MID(D2,FIND(" ",D2)+1,LEN(D2)-FIND(" ",D2)-2)&" "&LEFT(D2,FIND(" ",D2)-1)&" 1900")

答案 1 :(得分:2)

使用@chrisneilsen给出的辅助列概念,辅助列的不同公式为:

=DATEVALUE(LEFT(D2,LEN(D2)-2)&", 2012")

这将取消您日期的最后2个字母(因为Excel不理解序数),并通过将“,2012”附加到该新文本并阅读日期来将其转换为日期。

答案 2 :(得分:1)

如果您有大量数据,可以使用这样的脚本将日期格式转换为数字。我假设您的样本中的生日在D列,如果没有,那么只需在下面更改。

Option Explicit
Sub ChangeFormat()
    With Columns("D").Cells
        .Replace What:="January", Replacement:="01", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        .Replace What:=" ", Replacement:="/", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        .Replace What:="th", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        .Replace What:="nd", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        .Replace What:="st", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        .Replace What:="rd", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    End With
End Sub

然后您可以按日期对其进行排序。

答案 3 :(得分:1)

我同意,您需要有一列格式正确的日期才能启用排序。

但是,您可以使用我在another site上找到的这个漂亮的公式,使用您喜欢的视觉格式制作第二列,以便根据您的需要重新格式化日期。我更改了原件以匹配您的格式。

=LOWER(TEXT(A1,"mmmm d"))&LOOKUP(DAY(A1),{1,2,3,4,21,22,23,24,31;"st","nd","rd","th","st","nd","rd","th","st"}) &TEXT(A1,", yyyy")