如何在 Excel 中按月和日对生日排序(5 种方法)
我们有一个示例数据集,其中生日未按顺序排列。
方法 1 – 结合使用 MONTH 和 DAY 函数要按月和日排序生日(忽略年份),请排列从一月到五月的日期以及其中的天数这些月份将按升序排列。
步骤:
=MONTH(D4)
MONTH 将给出Birthday 列中日期的月份序列号。
➤ 按ENTER并向下拖动填充手柄工具。
它将输出相应生日的月份序号。
要从生日列的日期中提取天数,我们将使用以下公式
=DAY(D4)DAY将给出生日列中日期的天数。
将月列的值和日列的值按升序排序,以按月和按日顺序排列生日。 ➤ 选择数据集并转到主页选项卡>>编辑组>>排序和过滤下拉菜单>>自定义排序选项。
➤ 单击我的数据有标题选项,然后在排序方式框中选择以下内容:列→月份 排序依据 → 单元格值 顺序→从小到大
添加日列以在对月份进行排序后对天的值进行排序。 ➤ 选择添加级别选项添加第二个排序字段。
➤ 在然后框中选择以下内容, 栏→日 排序依据 → 单元格值 顺序→从小到大 ➤ 按确定。
数据集根据生日排序,如下图所示。
方法 2 – 使用 TEXT 和 VALUE 函数按月和日对生日进行排序U
使用TEXT函数和VALUE函数,我们将组合生日<的日期的月份和日期的序列号< 列,为此,我们在示例数据集中添加了 Text 和 Value 列。
步骤:
=TEXT(D4,"mdd")TEXT 将更改D4 中的日期格式为mdd 格式,其中m 表示月份,d 表示日。
➤ 按ENTER并向下拖动填充手柄工具。
它将在文本列中以文本格式输出组合的月份和日期值。
使用以下公式将文本转换为值
=VALUE(E4)VALUE 会将E4 中的文本字符串转换为数值。
根据值列对给定数据集的值进行排序。 ➤ 选择数据集并转到主页选项卡>>编辑组>>排序和过滤下拉菜单>>自定义排序选项。
➤ 单击我的数据有标题选项,然后在排序方式框中选择以下内容:列→值 排序依据 → 单元格值 顺序→从小到大 ➤ 按确定。
生日将按月和日排序。
方法 3 – 使用 DATE 函数安排生日步骤:
=DATE(2020,MONTH(D4),DAY(D4))2020 是一个随机年份,通过使用这一年,日期列中的所有日期都将具有相同的年份,因此我们将能够在排序时忽略年份.MONTH 将提取D4 中日期的月份值,DAY 将给出中日期的日期D4。
➤ 按ENTER并向下拖动填充手柄工具。
所有年份都相同,但生日列的日期具有相应的月份和日期。
要根据Helper列对以下数据集的值进行排序, ➤ 选择数据集并转到主页选项卡>>编辑组>>排序和过滤下拉菜单>>自定义排序选项。
➤ 单击我的数据有标题选项,然后在排序依据框中选择以下内容, 栏→助手 排序依据 → 单元格值 顺序 → 从最旧到最新 ➤ 按确定。
数据集根据生日排序,如下图所示。
方法 4 – 使用 SORTBY 和 TEXT 函数按月和日对生日进行排序步骤:
=SORTBY(B4:C13,TEXT(C4:C13,"mdd"))B4:C13 是我们要应用排序的范围,TEXT(C4:C13,”mdd”) 是月份和日期组合的范围来自 C4:C13 范围,我们将根据该范围进行排序过程。
按ENTER即可获取结果。
SORTBY 函数仅适用于 Microsoft Excel 365 版本。
方法 5 – 使用 VBA 代码步骤:
Visual Basic 编辑器将打开。 ➤ 转到插入选项卡>>模块选项。
将创建一个模块。
➤ 输入以下代码
Sub sorting_bdays_by_m_d()
Dim initial_month, initial_day, new_month, new_day As Integer
Dim initial_date As Date, initial_employee As String
Dim initial_ID As Long
For k = 4 To 13
For l = k + 1 To 13
initial_month = Month(Cells(k, 4).Value)
initial_day = Day(Cells(k, 4).Value)
new_month = Month(Cells(l, 4).Value)
new_day = Day(Cells(l, 4).Value)
If (new_month < initial_month) Or (new_month = initial_month _
And new_day < initial_day) Then
initial_date = Cells(k, 4).Value
Cells(k, 4).Value = Cells(l, 4).Value
Cells(l, 4).Value = initial_date
initial_employee = Cells(k, 3).Value
Cells(k, 3).Value = Cells(l, 3).Value
Cells(l, 3).Value = initial_employee
initial_ID = Cells(k, 2).Value
Cells(k, 2).Value = Cells(l, 2).Value
Cells(l, 2).Value = initial_ID
End If
Next l
Next k
End Sub我们已将 initial_month、initial_day、new_month、new_day 声明为 Integer、 >initial_date 为 Date,initial_employee 为 String,initial_ID 为 Long强>. 我们使用了两个 For Next 循环,一个用于 k= 4 到 13 (数据集的开始和结束行号),另一个用于 l=k+ 1 到13 检查k的下一个值。 initial_month,initial_day 将在k和new_month的限制内存储单元格的月份和日期值,new_day将存储限制l的相应下一个单元格的月份和日期值。 IF 语句将检查new_month 是否小于initial_month ,或者如果它们相等,则new_day 应小于initial_day 并且如果满足条件,则以下单元格的新日期及其相应的员工 ID 和姓名将取代之前的单元格。
➤ 按F5。 数据将根据生日按月和日排序。