如何在Excel中计算日期之间的天数
在这个简单的 Excel 教程中,我将向您展示如何在 Excel 中计算日期之间的天数。
您是否经常难以计算两个日期之间的总天数或工作天数?计算员工工资时,节假日和周末是否会造成困难?
在我学习 Excel 及其计算日期和天数的便捷功能之前,我很难确定长日期范围内有多少天。我过去常常翻看日历页面,手动计算天数。
我知道在家、学校和工作中处理日期有多难。今天,我将通过屏幕截图逐步向您展示如何以不同的方式计算日历日期之间的天数。我希望您能找到一些与您每天处理的事情相匹配的示例。
推荐:最灵活的漏斗构建器插件Woofunnels Funnel Builder Pro
使用日期和时间函数向导
如果您不熟悉 Excel 及其功能,这是在 Excel 中计算两个日期之间天数的最佳方法。
假设您想找出上述数据集中项目开始日期和结束日期之间的总天数。
这里,B 列和C列包含项目的开始和结束日期。您需要在D 列中输入相应的日期。
选择列标题“总天数”下方的第一个单元格,D2
然后按Alt+ M+E调出“日期和时间”功能菜单。
单击上下文菜单中的“DAYS”以调出“函数参数”对话框,以构建DAYS函数的公式。
光标将自动进入结束日期字段。您只需单击包含项目截止日期的单元格即可。
现在,单击“开始日期”字段并选择包含项目启动日期的单元格。
单击“确定”即可在选定的单元格中获取结果D2
。
现在,使用单元格中的填充柄并将其向下拖动,直到存在数据的单元格与B 列和CD2
列平行。
Excel 将从到复制DAYS函数。D2
D7
使用各种 Excel 函数
除了 DAYS 函数之外,还有其他方便的 Excel 函数可以根据不同的条件计算日期的天数。让我们看看下面的这些函数:
DATEDIF 函数
除了天数之外,该函数还计算两个日期范围之间的完整月份数和年数。
在此函数中,您需要在开始日期和结束日期之后输入第三个参数。这是您想要输出的单位。让我们看看下面的这些参数:
Y
:计算完整年份M
:查找完整月份D
:计算天数
假设B 列和C列中有开始日期和结束日期。您想使用DATEDIF函数D2
来查找总天数。
在目标单元格中输入以下公式,D2
然后点击Enter:
=DATEDIF(B2,C2,"D")
Excel 将快速找到所选期间之间的总天数。
推荐:如何在Excel中使用TRUNC函数
NETWORKDAYS 函数
此 Excel 函数允许您通过减去周末和假日列表来计算两个日期范围之间的天数。您可以在工资单中使用此函数来计算员工或承包商的工资。
下面让我们看看如何使用NETWORKDAYS函数设置公式:
按如上所示组织您的数据集。
在 中D2
输入以下公式:
=NETWORKDAYS(B2,C2,$E$2:$E$6)
点击Enter获取两个日期范围之间的天数(不包括周末和节假日)。
您可以使用相同的公式来计算多个开始和结束日期的天数。我在公式中保留了固定的假日列表,以便您可以将同一组假日应用于其他日期范围。
如果您不想从总天数中减去假期,请使用以下公式:
=NETWORKDAYS(B2,C2)
这个函数的缺点如下:
- 假期必须以短日期和长日期格式输入。
- 对于跨越多个日历年的日期范围,您必须分别列出所有年份的假期。
- 该功能从Excel 2013开始可用。如果您使用的是Excel 2010及更早版本,则找不到此功能。
NETWORKDAYS.INTL 函数
假设您的组织遵循 24 小时不间断的工作文化。此时,您需要处理多个周末组合,因为您必须允许所有在周一至周五和周六至周三工作的员工每周休息 2 天。
因此,您不能使用NETWORKDAYS函数来计算两个日期范围之间的工作日,因为该函数仅将周六和周日视为周末。
NETWORKDAYS.INTL可以帮到你。你可以从 17 种不同的周末组合中进行选择,每周休息两天或一周。
此外,您还可以使用自定义周末组合。例如,周末代码1100000表示周一和周二是每周休息日。周末代码长度为 7 个字符,并且始终以Monday开头。因此,要排除 Mon 和 Tue,文本字符串将为 1100000。
下面让我演示使用此函数在 Excel 中计算两个日期之间的工作日天数的技术:
如上所示重构您的工作数据集。
在 中F2
输入以下公式:
=NETWORKDAYS.INTL(D2,E2,"1100000",$H$2:$H$6)
点击Enter即可获得不包括自定义周末和节假日的总工作日。
对于下一位员工朱莉,您不能使用相同的公式,因为她的周末与杰森的不同。
您必须自定义上述公式中的周末代码字符串,即"1100000"
。
对于 Juile 来说,周末代码是0011000
,这意味着周三和周四休息。
因此新的公式如下:
=NETWORKDAYS.INTL(D3,E3,"0011000",$H$2:$H$6)
如果您不想使用周末代码字符串,您可以遵循 Excel 显示的默认周末组合编号。这是从1
到17
。
当您在公式中选择周末参数部分时,Excel 将打开周末代码的上下文菜单,如上所示。
例如,在上一个数据集中,Thomas 的休息日是星期六。因此,计算他的总工作日的公式如下:
=NETWORKDAYS.INTL(D4,E4,17,$H$2:$H$6)
此功能的缺点是,如果列表中的所有员工没有相同的周末组合,则必须手动输入周末代码。
TODAY 函数
假设您想计算从几个项目开始到今天经过的天数。在这种情况下,您可以使用Excel 中的TODAY函数和减法符号计算两个日期之间的天数。
首先组织您的工作表数据集,如上所示。
在输入公式之前C2
,您必须使用特殊数字格式优化开始日期和已用天数列。
选择B2:B7
单元格范围并单击“数字”命令块中的“常规”下拉菜单。
从上下文菜单中选择“短日期” 。
选择C2:C7
单元格范围并按Ctrl+ 1。
在“设置单元格格式”对话框中,单击“自定义”0
类别并在“类型”字段中输入。
单击“确定”保存自定义单元格格式代码。
现在,在 中C2
输入以下公式:
=TODAY()-B2
点击Enter计算天数。
现在,使用单元格中的填充柄C2
并将其向下拖动以生成其余项目截至今天的总天数。
推荐:如何在Windows 11上使用PowerShell安装Telnet客户端
使用 Power Query
如果您的输入数据集太大,以至于 Excel 工作表无法容纳,则必须遵循此方法。这是因为Excel 只能处理有限数量的行和列。
Power Query允许您从大多数第三方数据库导入数据。此外,您还可以将现有的 Excel 工作表数据集导出到 Power Query 进行数据转换。
要从其他来源导入数据集,请单击“数据”选项卡,然后点击“获取数据”下拉菜单。
然后,将鼠标光标悬停在首选源上,如来自数据库、来自 Azure等。
Excel 将显示一个溢出菜单,您需要从中选择最终数据源。例如,您在此处获得的选项包括来自 SQL Server 数据库、来自 Azure SQL 数据库、来自 Power BI (MSFT)等。
要将工作表数据导出到 Power Query,请选择数据集并按“数据”选项卡的“获取和转换数据”块中的“从表/范围”命令。
在“创建表”对话框中单击“确定”即可完成该过程。
在Power Query上,选择包含开始日期和结束日期的列。
现在,转到“转换”选项卡,然后单击“日期和时间”列中的“日期”下拉菜单。
从上下文菜单中选择“仅日期”。
转到“添加列”选项卡并单击“自定义列”命令。
在自定义列向导中,在新列名称字段中输入总天数。
在自定义列公式字段中,输入以下Power Query公式:
Duration.Days([End Date]-[Start Date])
单击“确定”以应用公式并创建新列。
转到“文件”选项卡,然后单击“关闭并加载到”选项。
您将看到“导入数据”对话框。在此处,单击“现有工作表”选项,然后选择工作表上的目标单元格范围。
删除或隐藏旧数据集。
恭喜!您已成功计算出 Power Query 中日期范围的天数。
推荐:在Microsoft Excel中旋转文本的8种方法
使用 Excel VBA
Excel VBA 让您可以自动完成 Excel 中计算日期之间天数的整个过程,包括选择数据集、格式化输出、应用计算条件以及在特定单元格范围内填充结果。
如果您不熟悉 Excel VBA,我向您保证,使用本文中提到的 VBA 脚本可以很容易地实现此类自动化。
您只需从以下 Excel 教程中学习创建 VBA 宏的技术:
如果您已准备好,请尝试使用以下 VBA 脚本来创建和运行宏:
使用视觉提示计算天数
使用以下脚本创建一个VBA 宏,它将直观地引导您完成计算过程。
Sub CalculateDaysBetweenDates()
' Declare variables
Dim startDate As Date
Dim endDate As Date
Dim totalDays As Integer
' Show input box to enter the start date
startDate = InputBox("Enter the start date (mm/dd/yyyy):", "Start Date")
' Show input box to enter the end date
endDate = InputBox("Enter the end date (mm/dd/yyyy):", "End Date")
' Calculate the total days count
totalDays = endDate - startDate
' Show a message box showing the total days count
MsgBox "The total days count is: " & totalDays, vbInformation, "Total Days"
End Sub
创建完宏后,按Alt+F8调出宏对话框。
单击CalculateDaysBetweenDates宏并点击运行。
在“开始日期”对话框中,输入初始日期。
在结束日期对话框中,输入截止日期。
Excel 将显示一个包含总天数的通知对话框。
⚠️警告:在运行本教程中介绍的 VBA 宏之前,请先创建工作簿的副本。您将无法使用Excel 撤消功能恢复到工作表的先前状态。
根据开始和结束日期列表计算天数
使用以下脚本根据自定义的开始和结束日期列表(不包括周末)计算总天数:
Sub CalculateDays()
' Prompt the user to select the cell range for the start dates
Dim StartRange As Range
Set StartRange = Application.InputBox("Select the cell range for the start dates", Type:=8)
' Prompt the user to select the cell range for the end dates
Dim EndRange As Range
Set EndRange = Application.InputBox("Select the cell range for the end dates", Type:=8)
' Check if the ranges have the same size
If StartRange.Count EndRange.Count Then
MsgBox "The selected ranges must have the same size", vbCritical
Exit Sub
End If
' Ask the user if they want to exclude weekends
Dim ExcludeWeekends As Boolean
ExcludeWeekends = (MsgBox("Do you want to exclude weekends?", vbYesNo) = vbYes)
' Prompt the user to select the destination cell range
Dim DestRange As Range
Set DestRange = Application.InputBox("Select the destination cell range", Type:=8)
' Check if the destination range has the same size as the start and end ranges
If DestRange.Count StartRange.Count Then
MsgBox "The destination range must have the same size as the start and end ranges", vbCritical
Exit Sub
End If
' Calculate the number of days between the start and end dates
Dim i As Long
For i = 1 To StartRange.Count
If ExcludeWeekends Then
' Exclude weekends
DestRange.Cells(i).Value = Application.NetworkDays(StartRange.Cells(i).Value, EndRange.Cells(i).Value)
Else
' Include weekends
DestRange.Cells(i).Value = EndRange.Cells(i).Value - StartRange.Cells(i).Value
End If
Next i
End Sub
该宏将显示以下输入框以直观地指导您:
- 用于选择开始日期范围的对话框。
- 另一个对话框用于选择结束日期范围。
- 用于包含或排除周末的确认对话框。
- 一个输入框,以便您可以选择结果的目的地。
上面是此宏的输出示例。
计算不包括自定义假日的天数
如果您需要从项目开始和结束日期中排除假期和周末,请使用以下 VBA 脚本:
Sub CalculateDays()
' Get the range for start dates
Set startDateRange = Application.InputBox("Select the range for start dates", Type:=8)
' Get the range for end dates
Set endDateRange = Application.InputBox("Select the range for end dates", Type:=8)
' Ask whether to exclude weekends
ExcludeWeekends = MsgBox("Do you want to exclude weekends?", vbYesNo) = vbYes
' If excluding weekends, ask for the range for holidays
If ExcludeWeekends Then
Set holidayRange = Application.InputBox("Select the range for holidays", Type:=8)
End If
' Get the range for output
Set outputRange = Application.InputBox("Select the range for output", Type:=8)
' Calculate the number of days between each pair of start and end dates
For i = 1 To startDateRange.Cells.Count
startDate = startDateRange.Cells(i).Value
endDate = endDateRange.Cells(i).Value
' Initialize the number of days to the difference between the end and start dates
numDays = endDate - startDate + 1
' Subtract the number of weekend days and holidays if specified
If ExcludeWeekends Then
For d = startDate To endDate
If Weekday(d, vbMonday) >= 6 Or Not IsError(Application.Match(d, holidayRange, 0)) Then
numDays = numDays - 1
End If
Next d
End If
' Write the number of days to the output range
outputRange.Cells(i).Value = numDays
Next i
End Sub
执行宏后,Excel 将显示以下可视输入框。请输入相应的数据:
- 一个输入字段,以便您可以选择开始日期的范围。
- 在下一个输入框中选择结束日期范围。
- 要求包括或排除周末的消息框。
- 一个输入字段,以便您可以选择结束日期的范围。
- 在下一个输入框中选择目标单元格范围。
上面的截图显示了该 VBA 脚本的性能和准确性。
结论
所以,现在您知道如何使用函数向导、流行的 Excel 函数、Power Query 和 Excel VBA 计算 Excel 中日期之间的天数。
如果本文对您有任何帮助,请在评论框中留言。如果您有任何建议或提示,请在评论中分享。