根据生日sortingexcel

如何根据Excel表中的生日安排一个列表?

 SLno名称rollnumber生日
 ______________________________________
 1月45日8月25日
 2 ddfg 87 4月2日
 3月3日98年4月4日 

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

 SLno名称rollnumber生日
 ______________________________________
 1月1日98年1月4日 
 2 ddfg 87 4月2日
 3月45日8月25日

最好的select是使用DateSerial号码作为生日,格式化以便DateSerial显示。

如果你不能转换,试试这个

使用公式添加一个帮助器列来将生日转换为DateSerial并对该列进行sorting

公式(假设生日在D栏):

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

使用@chrisneilsen给出的帮助者列的想法,辅助者列的另一个公式是:

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

这将从您有date的最后2个字母(因为Excel不理解序数),并通过在该新文本上附加“,2012”并读取date将其转换为date。

如果你有很多数据,你可以使用这样的脚本来将你的date格式转换为数字。 我从你的样本中假设,生日是在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 

然后您可以按date对其进行sorting。

我同意,您将需要有一个正确格式化的date列,以启用sorting。

但是,你可以用另一个网站上的这个漂亮的公式来设置你喜欢的视觉格式的第二列,以重新格式化你的date。 我改变了原来的格式。

 =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")