Vba 根据生日对excel进行排序
如何在excel表格中根据生日排列列表 SLno Name rollnumber birthday ______________________________________ 1 aaa 45 august 25th 2 ddfg 87 april 2nd 3 poiu 98 january 4th SLno姓名号码生日 ______________________________________ 1月45日8月25日 2 ddfg 87年4月2日 1998年1月4日 在上表中,我需要根据生日栏更新列表? 预期o/p: SLno Name rollnumber birthday ______________________________________ 1 poiu 98 january 4th 2 ddfg 87 april 2nd 3 aaa 45 august 25th SLno姓名号码生日 ______________________________________ 1998年1月4日 2 ddfg 87年4月2日 3月45日8月25日Vba 根据生日对excel进行排序,vba,excel,Vba,Excel,如何在excel表格中根据生日排列列表 SLno Name rollnumber birthday ______________________________________ 1 aaa 45 august 25th 2 ddfg 87 april 2nd 3 poiu 98 january 4th SLno姓名号码生日 __________________
最好的选择是在生日时使用
DateSerial
数字,格式可根据需要显示
如果你不能转换,试试这个
添加一个带有公式的helper列,将生日转换为DateSerial
,并对该列进行排序
公式(假设生日在D列中)
:
最好的选择是在生日时使用
DateSerial
数字,格式可根据需要显示
如果你不能转换,试试这个
添加一个带有公式的helper列,将生日转换为DateSerial
,并对该列进行排序
公式(假设生日在D列中)
:
如果你有很多数据,你可以使用这样的脚本将日期格式转换成数字。我从你的样本中假设生日在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
然后,您可以按日期对其进行排序。如果您有大量数据,可以使用这样的脚本将日期格式转换为数字。我从你的样本中假设生日在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
然后,您可以按日期对其进行排序。使用@chrisneilsen给出的helper列思想,helper列的另一个公式是:
=DATEVALUE(LEFT(D2,LEN(D2)-2)&", 2012")
这将从日期中减去最后两个字母(因为Excel不理解序数),并通过在新文本中添加“、2012”并读取日期将其转换为日期。使用@chrisneilsen给出的helper列思想,helper列的另一个公式是:
=DATEVALUE(LEFT(D2,LEN(D2)-2)&", 2012")
这将从日期中减去最后两个字母(因为Excel不理解序数),并通过在新文本中添加“、2012”并读取日期来将其转换为日期。我同意,您需要有一列具有正确格式的日期以启用排序 然后你可以用我在上面找到的这个漂亮的公式,用你喜欢的视觉格式,在第二列中重新格式化你想要的日期。我更改了原始格式以匹配您的格式
=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")
我同意,您将需要有一列具有正确格式的日期以启用排序 然后你可以用我在上面找到的这个漂亮的公式,用你喜欢的视觉格式,在第二列中重新格式化你想要的日期。我更改了原始格式以匹配您的格式
=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")
在“生日”列中使用真实日期(非文本),Excel将在一次单击中为您排序。在“生日”列中使用真实日期(非文本),Excel将在一次单击中为您排序。