如何在Excel中计算日期之间的天数

如何在Excel中计算日期之间的天数

在这个简单的 Excel 教程中,我将向您展示如何在 Excel 中计算日期之间的天数。

您是否经常难以计算两个日期之间的总天数或工作天数?计算员工工资时,节假日和周末是否会造成困难?

在我学习 Excel 及其计算日期和天数的便捷功能之前,我很难确定长日期范围内有多少天。我过去常常翻看日历页面,手动计算天数。

我知道在家、学校和工作中处理日期有多难。今天,我将通过屏幕截图逐步向您展示如何以不同的方式计算日历日期之间的天数。我希望您能找到一些与您每天处理的事情相匹配的示例。

推荐:最灵活的漏斗构建器插件Woofunnels Funnel Builder Pro

使用日期和时间函数向导

如果您不熟悉 Excel 及其功能,这是在 Excel 中计算两个日期之间天数的最佳方法。

如何在Excel中计算日期之间的天数

假设您想找出上述数据集中项目开始日期和结束日期之间的总天数。

这里,B 列C列包含项目的开始和结束日期。您需要在D 列中输入相应的日期。

使用 DAYS 公式
使用 DAYS 公式

选择列标题“总天数”下方的第一个单元格,D2然后按AltM+E调出“日期和时间”功能菜单。

设置函数
设置函数

单击上下文菜单中的“DAYS”以调出“函数参数”对话框,以构建DAYS函数的公式。

光标将自动进入结束日期字段。您只需单击包含项目截止日期的单元格即可。

现在,单击“开始日期”字段并选择包含项目启动日期的单元格。

使用 DAYS 根据日期计算天数
使用 DAYS 根据日期计算天数

单击“确定”即可在选定的单元格中获取结果D2

使用填充柄
使用填充柄

现在,使用单元格中的填充柄并将其向下拖动,直到存在数据的单元格与B 列CD2列平行。

Excel 将从到复制DAYS函数。D2D7

使用各种 Excel 函数

除了 DAYS 函数之外,还有其他方便的 Excel 函数可以根据不同的条件计算日期的天数。让我们看看下面的这些函数:

DATEDIF 函数

除了天数之外,该函数还计算两个日期范围之间的完整月份数和年数。

在此函数中,您需要在开始日期和结束日期之后输入第三个参数。这是您想要输出的单位。让我们看看下面的这些参数:

  • Y计算完整年份
  • M查找完整月份
  • D计算天数

假设B 列C列中有开始日期和结束日期。您想使用DATEDIF函数D2来查找总天数。

在目标单元格中​​输入以下公式,D2然后点击Enter

=DATEDIF(B2,C2,"D")
使用 DATEDIF 根据日期计算天数
使用 DATEDIF 根据日期计算天数

Excel 将快速找到所选期间之间的总天数。

推荐:如何在Excel中使用TRUNC函数

NETWORKDAYS 函数

此 Excel 函数允许您通过减去周末和假日列表来计算两个日期范围之间的天数。您可以在工资单中使用此函数来计算员工或承包商的工资。

下面让我们看看如何使用NETWORKDAYS函数设置公式:

样本数据集 2

按如上所示组织您的数据集。

配置 NETWORKDAYS
配置 NETWORKDAYS

在 中D2输入以下公式:

=NETWORKDAYS(B2,C2,$E$2:$E$6)
计算公式
计算公式

点击Enter获取两个日期范围之间的天数(不包括周末和节假日)。

您可以使用相同的公式来计算多个开始和结束日期的天数。我在公式中保留了固定的假日列表,以便您可以将同一组假日应用于其他日期范围。

如果您不想从总天数中减去假期,请使用以下公式:

NETWORKDAYS 无节假日
NETWORKDAYS 无节假日
=NETWORKDAYS(B2,C2)

这个函数的缺点如下:

  • 假期必须以短日期长日期格式输入。
  • 对于跨越多个日历年的日期范围,您必须分别列出所有年份的假期。
  • 该功能从Excel 2013开始可用。如果您使用的是Excel 2010及更早版本,则找不到此功能。

NETWORKDAYS.INTL 函数

假设您的组织遵循 24 小时不间断的工作文化。此时,您需要处理多个周末组合,因为您必须允许所有在周一至周五和周六至周三工作的员工每周休息 2 天。

因此,您不能使用NETWORKDAYS函数来计算两个日期范围之间的工作日,因为该函数仅将周六和周日视为周末。

NETWORKDAYS.INTL可以帮到你。你可以从 17 种不同的周末组合中进行选择,每周休息两天或一周。

此外,您还可以使用自定义周末组合。例如,周末代码1100000表示周一周二是每周休息日。周末代码长度为 7 个字符,并且始终以Monday开头。因此,要排除 Mon 和 Tue,文本字符串将为 1100000。

下面让我演示使用此函数在 Excel 中计算两个日期之间的工作日天数的技术:

样本数据集 3

如上所示重构您的工作数据集。

设置公式
设置公式

在 中F2输入以下公式:

=NETWORKDAYS.INTL(D2,E2,"1100000",$H$2:$H$6)
计算 NETWORKDAYS.INTL
计算 NETWORKDAYS.INTL

点击Enter即可获得不包括自定义周末和节假日的总工作日。

对于下一位员工朱莉,您不能使用相同的公式,因为她的周末与杰森的不同。

您必须自定义上述公式中的周末代码字符串,即"1100000"

对于 Juile 来说,周末代码是0011000,这意味着周三和周四休息。

因此新的公式如下:

更改周末代码
更改周末代码
=NETWORKDAYS.INTL(D3,E3,"0011000",$H$2:$H$6)

如果您不想使用周末代码字符串,您可以遵循 Excel 显示的默认周末组合编号。这是从117

默认周末代码
默认周末代码

当您在公式中选择周末参数部分时,Excel 将打开周末代码的上下文菜单,如上所示。

例如,在上一个数据集中,Thomas 的休息日是星期六。因此,计算他的总工作日的公式如下:

默认周末代码公式
默认周末代码公式
=NETWORKDAYS.INTL(D4,E4,17,$H$2:$H$6)

此功能的缺点是,如果列表中的所有员工没有相同的周末组合,则必须手动输入周末代码。

TODAY 函数

假设您想计算从几个项目开始到今天经过的天数。在这种情况下,您可以使用Excel 中的TODAY函数和减法符号计算两个日期之间的天数。

样本数据集 4

首先组织您的工作表数据集,如上所示。

在输入公式之前C2,您必须使用特殊数字格式优化开始日期已用天数列。

短日期格式
短日期格式

选择B2:B7单元格范围并单击“数字”命令块中的“常规”下拉菜单。

从上下文菜单中选择“短日期” 。

应用自定义格式
应用自定义格式

选择C2:C7单元格范围并按Ctrl1

“设置单元格格式”对话框中,单击“自定义”0类别并在“类型”字段中输入。

单击“确定”保存自定义单元格格式代码。

设置今日功能
设置今日功能

现在,在 中C2输入以下公式:

=TODAY()-B2
今天计算
今天计算

点击Enter计算天数。

使用填充柄表示今日
使用填充柄表示今日

现在,使用单元格中的填充柄C2并将其向下拖动以生成其余项目截至今天的总天数。

推荐:如何在Windows 11上使用PowerShell安装Telnet客户端

使用 Power Query

如果您的输入数据集太大,以至于 Excel 工作表无法容纳,则必须遵循此方法。这是因为Excel 只能处理有限数量的行和列。

Power Query允许您从大多数第三方数据库导入数据。此外,您还可以将现有的 Excel 工作表数据集导出到 Power Query 进行数据转换。

获取数据命令
获取数据命令

要从其他来源导入数据集,请单击“数据”选项卡,然后点击“获取数据”下拉菜单。

从 SQL 数据库
从 SQL 数据库

然后,将鼠标光标悬停在首选源上,如来自数据库来自 Azure等。

Excel 将显示一个溢出菜单,您需要从中选择最终数据源。例如,您在此处获得的选项包括来自 SQL Server 数据库来自 Azure SQL 数据库来自 Power BI (MSFT)等。

从表范围
从表范围

要将工作表数据导出到 Power Query,请选择数据集并按“数据”选项卡的“获取和转换数据”块中的“从表/范围”命令。

“创建表”对话框中单击“确定”即可完成该过程。

在Power Query上,选择包含开始日期和结束日期的列。

仅使用日期进行转换
仅使用日期进行转换

现在,转到“转换”选项卡,然后单击“日期和时间”列中的“日期”下拉菜单。

从上下文菜单中选择“仅日期”

新列名
新列名

转到“添加列”选项卡并单击“自定义列”命令。

自定义列向导中,在新列名称字段中输入总天数

输入 Power Query 公式
输入 Power Query 公式

在自定义列公式字段中,输入以下Power Query公式:

Duration.Days([End Date]-[Start Date])
Power Query 中的计算天数
Power Query 中的计算天数

单击“确定”以应用公式并创建新列。

关闭并加载至
关闭并加载至

转到“文件”选项卡,然后单击“关闭并加载到”选项。

您将看到“导入数据”对话框。在此处,单击“现有工作表”选项,然后选择工作表上的目标单元格范围。

删除行
删除行

删除隐藏旧数据集。

恭喜!您已成功计算出 Power Query 中日期范围的天数。

推荐:在Microsoft Excel中旋转文本的8种方法

使用 Excel VBA

Excel VBA 让您可以自动完成 Excel 中计算日期之间天数的整个过程,包括选择数据集、格式化输出、应用计算条件以及在特定单元格范围内填充结果。

如果您不熟悉 Excel VBA,我向您保证,使用本文中提到的 VBA 脚本可以很容易地实现此类自动化。

您只需从以下 Excel 教程中学习创建 VBA 宏的技术:

如果您已准备好,请尝试使用以下 VBA 脚本来创建和运行宏:

使用视觉提示计算天数

使用以下脚本创建一个VBA 宏,它将直观地引导您完成计算过程。

VBA 脚本 1
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 撤消功能恢复到工作表的先前状态。

根据开始和结束日期列表计算天数

使用以下脚本根据自定义的开始和结束日期列表(不包括周末)计算总天数:

VBA 脚本 2
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 在 Excel 中计算两个日期之间的天数
使用 VBA 在 Excel 中计算两个日期之间的天数

上面是此宏的输出示例。

计算不包括自定义假日的天数

如果您需要从项目开始和结束日期中排除假期和周末,请使用以下 VBA 脚本:

VBA 脚本 3
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 中日期之间的天数。

如果本文对您有任何帮助,请在评论框中留言。如果您有任何建议或提示,请在评论中分享。

推荐:Weebly网站的jQuery手风琴小部件


发表评论