如何在 Excel 中计算两个日期之间的百分比?
在 Excel 中管理进行中的项目或监控计划任务进度时,通常需要根据今日日期计算任务周期已过去的比例。这有助于通过将已过时间表示为总计划周期的百分比,直观评估项目是提前、按期还是延迟。例如,您的工作表中可能包含多个任务,每个任务均有各自的开始日期和结束日期。您希望了解截至今天,每个任务的计划周期已完成百分之多少。本教程将逐步介绍在 Excel 中实现这一目标的实用方法,说明如何自动更新进度百分比,并展示如何利用条件格式根据这些结果直观突出显示任务状态。
下图显示了一个示例任务列表,包含开始日期、结束日期以及所需的完成百分比计算结果:

使用公式计算两个日期之间的完成百分比
要计算两个日期之间任务的完成百分比,您可以使用基于 Excel 的 DATEDIF 和 TODAY 函数的公式。当任务量较小且数据集更新不频繁时,此方法尤为适用。
1. 在需要显示结果的行中(例如单元格 )D2),输入以下公式:
=(DATEDIF(B2,TODAY(),"d")+1)/(DATEDIF(B2,C2,"d")+1) 参数说明:
B2 是任务开始日期所在单元格,C2 是任务结束日期所在单元格。TODAY() 会自动返回当前日期,因此该公式计算的是从任务开始至今已过去的天数占任务总计划天数的比例。
2. 输入公式后,向下拖动填充柄,即可将公式复制到所有需要的行中,每行会根据今天的日期自动显示对应任务的当前完成百分比。下图展示了该公式应用于多个任务的效果:

3. 选中所有已计算的单元格,转到开始选项卡,点击数字组中的百分比样式按钮,即可将数值以百分比形式显示,而非小数。您还可使用增加小数位数和减少小数位数按钮,按需调整小数位数的精度。

注意事项:此方法非常灵活,但需确保所有日期单元格在 Excel 中均设置为实际日期格式,否则可能导致错误或显示不正确的值。
如果您希望结果每天自动更新,TODAY()可确保每次重新计算或打开工作簿时,百分比都能准确反映当前进度。但请注意,若引用的是手动输入的静态日期(而非 )TODAY()),则需随时间推移自行更新这些值。
VBA 代码 – 自动计算百分比并动态更新整行及日期数据
如果您的工作表包含大量具有明确开始日期和结束日期的任务,不妨使用 VBA 根据今日日期自动计算每个任务的进度百分比。当您希望在无需手动输入公式的情况下动态更新多行任务进度时,此方法尤为高效。该宏会逐行遍历任务,将今日日期与任务的开始日期和结束日期进行比对,计算已过时间占总持续时间的百分比,并将结果填入目标列,助您快速掌握各项任务的完成进度。
1. 按 Alt + F11 打开 Microsoft Visual Basic for Applications 编辑器。在 VBA 编辑器中,依次点击插入 > 模块 以创建新模块,然后将以下代码粘贴其中:
Sub UpdateTaskCompletionPercent()
'Updated by Extendoffice 20250724
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim StartDateCol As String, EndDateCol As String, PercentCol As String
Dim startDate As Variant, endDate As Variant, todayDate As Date
Dim pct As Double
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set ws = Application.ActiveSheet
' Adjust these column letters as needed
StartDateCol = "B"
EndDateCol = "C"
PercentCol = "D"
todayDate = Date
lastRow = ws.Cells(ws.Rows.Count, StartDateCol).End(xlUp).Row
For i = 2 To lastRow ' Skip header
startDate = ws.Cells(i, StartDateCol).Value
endDate = ws.Cells(i, EndDateCol).Value
If IsDate(startDate) And IsDate(endDate) Then
If endDate >= startDate Then
If todayDate < startDate Then
pct = 0
ElseIf todayDate >= endDate Then
pct = 1
Else
pct = (todayDate - startDate + 1) / (endDate - startDate + 1)
End If
ws.Cells(i, PercentCol).Value = pct
ws.Cells(i, PercentCol).NumberFormat = "0.00%"
Else
ws.Cells(i, PercentCol).Value = "Invalid dates"
End If
Else
ws.Cells(i, PercentCol).Value = "Date error"
End If
Next i
End Sub 2. 输入代码后,按 F5(或单击)
运行按钮)即可执行脚本。此批处理操作将立即根据当前日期填充百分比列(D)中的每一行。
注意事项与故障排除:
- 如果您的任务数据分布在不同的列中,请调整代码中的
StartDateCol、EndDateCol和PercentCol,使其与您工作表的布局完全匹配。 - 如果脚本显示 “Date error”或 “Invalid dates”,请检查是否存在空白行、日期输入错误,或起始日期与结束日期重叠/顺序有误。
- 此方法可确保您的百分比计算始终准确无误,并在批量编辑数据或从其他来源导入数据后自动实时更新。
此 VBA 解决方案专为需要反复进行数据准备和自动化报告的场景而设计,可有效替代低效的手动公式复制操作。
更多相关百分比文章:
- 根据折扣百分比计算原始价格
- 通常,在我们的日常生活中,商场中的一些商品会打折销售。如果您已知折扣后的价格和折扣百分比(如下图所示),该如何在 Excel 中计算该商品的原始价格?
- 计算一年或一个月已过或剩余的百分比
- 假设工作表中有一列日期,您希望根据这些日期计算当年或当月已过或剩余的百分比,该如何在 Excel 中实现?
- 从列表中计算“是”和“否”的百分比
- 如何在 Excel 工作表中根据指定单元格区域,计算其中“是”和“否”文本所占的百分比?本文或许能助您轻松完成这项任务。
- 创建同时显示百分比和数值的图表
- 在柱形图或条形图中添加百分比或数值轻而易举,但您是否尝试过在 Excel 中创建同时显示百分比和数值的柱形图或条形图?
- 使用 COUNTIF 函数在 Excel 中计算百分比
- 例如,我有一份研究论文的汇总报告,其中包含三个选项 A、B 和 C,现在希望计算每个选项各自所占的百分比——即选项 A 占所有选项总数的百分比。本文将介绍如何在指定范围内计算某一特定选项所占的百分比。
- 超级编辑栏(轻松编辑多行文本和公式);阅读版式(轻松阅读和编辑大量单元格);粘贴到筛选范围……
- 合并单元格/行/列并保留数据;分割单元格内容;合并重复行并求和/求平均值……防止重复项单元格;比较区域……
- 选择重复或唯一行;选择空白行(所有单元格均为空);超级查找和模糊查找多个工作簿中的内容;随机选择……
- 精准公式复制多个单元格而不更改公式引用;自动创建引用到多个工作表;插入项目符号、复选框等更多功能……
- 收藏并快速插入公式、区域、图表和图片;加密单元格并设置密码;创建邮件列表并发送电子邮件……
- 提取文本、添加文本、删除某位置字符、删除空格;创建并打印数据分页统计;在单元格内容与批注之间转换……
- 超级筛选(保存并应用筛选方案到其他工作表);高级排序按月/周/日、频率等分组;特殊筛选按加粗、倾斜等格式……
- 合并工作簿和工作表;汇总表格基于关键列;分割数据到多个工作表;批量转换 xls、xlsx 和 PDF……
- 数据透视表按周数、星期几等分组……显示未锁定、选区锁定并以不同颜色标识;高亮显示包含公式/名称的单元格……

- 在 Word、Excel、PowerPoint、Publisher、Access、Visio 和 Project 中启用标签式编辑与阅读,大幅提升多文档操作效率!
- 在同一个窗口的新标签页中打开并创建多个文档,而非在新窗口中操作。
- 将您的工作效率提升 50%,每天减少数百次鼠标点击!
