如何在 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
以匹配您的表格布局。 - 如果脚本显示“日期错误”或“无效日期”,请检查是否有空行、错误的日期条目或重叠/错误的开始-结束日期。
- 这种方法确保您的百分比计算保持准确并针对所有任务进行更新,特别是在批量编辑数据或从其他来源导入数据之后。
这种 VBA 解决方案适用于重复的数据准备和自动化报告,手动复制公式效率低下。
更多相关百分比文章:
- 从百分比折扣计算原价
- 通常,在我们的日常生活中,购物中心的一些产品会有折扣。如果您有折扣价格和百分比折扣,如下面的屏幕截图所示,那么如何在 Excel 中计算该产品的原价呢?
- 计算已过去的年份或月份的百分比
- 假设您在工作表中有一系列日期,现在您想根据给定日期获取已过去或剩余的年份或月份的百分比。如何在 Excel 中解决这个问题?
- 计算列表中的是和否的百分比
- 如何在 Excel 工作表的范围单元格列表中计算是和否文本的百分比?也许这篇文章可以帮助您处理这个任务。
- 创建带有百分比和值的图表
- 对我们来说,向柱状图或条形图添加百分比或值很容易,但是,您是否尝试过在 Excel 中创建同时显示百分比和值的柱状图或条形图?
- 使用 Countif 计算 Excel 中的百分比
- 例如,我有一份研究报告的摘要,其中有三个选项 A、B、C,现在我想计算这三个选项各自的百分比。也就是说,我需要知道选项 A 占所有选项的百分比。本文将讨论如何在一个范围内获取特定选项的百分比。
- 超级公式栏(轻松编辑多行文本和公式);阅读布局(轻松读取和编辑大量单元格);粘贴到筛选区域...
- 合并单元格/行/列并保留数据;拆分单元格内容;合并重复行并求和/平均值... 防止重复单元格;比较区域...
- 选择重复或唯一行;选择空白行(所有单元格为空);在多个工作簿中进行超级查找和模糊查找;随机选择...
- 精准复制多个单元格而不改变公式引用;自动创建对多个工作表的引用;插入项目符号、复选框等...
- 收藏并快速插入公式、区域、图表和图片;用密码加密单元格;创建邮件列表并发送电子邮件...
- 提取文本,添加文本,按位置删除,删除空格;创建并打印分页小计;在单元格内容和批注之间转换...
- 超级筛选(保存并应用筛选方案到其他工作表);按月/周/日高级排序,频率等;按粗体、斜体特殊筛选...
- 合并工作簿和工作表;基于关键列汇总表格;将数据分割到多个工作表;批量转换 xls、xlsx 和 PDF...
- 数据透视表按周数、星期几等分组... 用不同颜色显示未锁定、已锁定单元格;高亮显示包含公式的单元格/名称...

- 在 Word、Excel、PowerPoint、Publisher、Access、Visio 和 Project 中启用标签式编辑和阅读。
- 在同一窗口的新标签页中打开和创建多个文档,而不是在新窗口中。
- 将您的生产力提高 50%,每天为您减少数百次鼠标点击!
