Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 根据生日对excel进行排序_Vba_Excel - Fatal编程技术网

Vba 根据生日对excel进行排序

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姓名号码生日 __________________

如何在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日
最好的选择是在生日时使用
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将在一次单击中为您排序。