【问题标题】:Calculating exact fraction of months during period计算期间月份的确切分数
【发布时间】:2015-09-30 21:45:40
【问题描述】:

我在 Excel 中有一个周期列表(按周期开始、周期结束给出),我必须准确计算该周期内有多少个月(作为分数)。

例如如果给定一个 1 月 15 日到 3 月 7 日的时间段,那么这将是

15-01-2015 until 31-01-2015 = 17 days
01-02-2015 until 28-02-2015 = 28 days
01-03-2015 until 07-03-2015 =  7 days

期间的月份 = 17/31 + 28/28 + 7/31 = 1,774193548 个月

请注意,在此计算中,开始日期结束日期都算作期间的一部分。

因为句点可以是任何东西,所以我无法用 Excel 公式计算出这个(或者如果它甚至可能的话)。

有什么想法吗?

【问题讨论】:

  • 你为什么想要这个“准确”的数字?简化问题的一种方法是查看年数和月数的差异以获得整个中间月数,然后在每一端添加分数。你可以得到开始时的天数作为开始日期和下个月1号之间的差,结束天数就是天数。
  • 有两列吗?例如,A 列列出开始日期,B 列列出结束日期?

标签: excel date datetime excel-formula


【解决方案1】:

这不是很漂亮,但是如果您的开始日期在 A1,结束日期在 A2,那么:

=12*(YEAR(A2)-YEAR(A1))+MONTH(A2)-MONTH(A1) +
 (DAY(A2)/(DATE(YEAR(A2),MONTH(A2)+1,1)-DATE(YEAR(A2),MONTH(A2),1))) -
 ((DAY(A1)-1)/(DATE(YEAR(A1),MONTH(A1)+1,1)-DATE(YEAR(A1),MONTH(A1),1)))

它的工作方式是:

  1. 12*(YEAR(A2)-YEAR(A1)):年差乘以 12。
  2. +MONTH(A2)-MONTH(A1):(加)月差。
  3. +(DAY(A2)/(DATE(YEAR(A2),MONTH(A2)+1,1)-DATE(YEAR(A2),MONTH(A2),1))):(加)结束日期的天数除以月底的总天数,由当月的 1st 和下个月的 1st 之间的差异计算得出。
  4. -((DAY(A1)-1)/(DATE(YEAR(A1),MONTH(A1)+1,1)-DATE(YEAR(A1),MONTH(A1),1))) (minues) 月份的开始日期(减 1 表示不计算该日期)除以开始月份的总天数。

当然,您可以为任何一组单元格复制它...

【讨论】:

  • @Ian - 匹配 OP 中的计算。这是您是否要同时包含开始日期和结束日期的问题。考虑 start 和 end 是相同的日期,如果你期望 0,不要做 -1,如果你期望 1/30(或 31),你需要从减去的日期中删除 1 天。
  • 你为什么要在最后一步减去?
  • @Ian 你已经问过了并删除了你的评论,但我的答案就在那里:-)
  • 我的意思是您要删除开始月份的部分而不是添加它。
  • 哦……那是因为我开始计算月差。然后我添加部分结束月份并减去部分开始月份。如果日期在同一月份,我会添加一个(大)分数并减去一个较小的分数。
【解决方案2】:

假设 A 列列出开始日期,B 列列出结束日期:

=SUMPRODUCT((1+B1:B3-A1:A3)/DAY(DATE(YEAR(A1:A3),MONTH(A1:A3)+1,)))

注意:您需要增加范围的深度以满足您的需要...只需将 3s 更改为更深的行号。

更新

根据您的反馈和新要求,这里是上述公式的一个版本,它将计算总数,一次一行:

=(1+B1-A1)/DAY(DATE(YEAR(A1),MONTH(A1)+1,))

更新 2

根据新的信息,一行的间隔可以超过一个月,这里是一个新版本的公式:

=DATEDIF(A1-DAY(A1)+1,B1,"m")-1+(1+EOMONTH(A1,0)-A1)/DAY(DATE(YEAR(A1),MONTH(A1)+1,))+(B1-EOMONTH(B1,-1))/DAY(DATE(YEAR(B1),MONTH(B1)+1,))

重要提示:确认此公式后,您需要对单元格应用通用数字格式。这是因为 Excel 会尝试不必要地应用 DATE 数字格式。

【讨论】:

  • @pnuts 每个月都是独立的。换句话说,每个月只有一行……根据示例数据。所以跨越一年的界限应该没有问题。你还有别的意思吗?
  • 是的,它做到了!哇!唯一出乎意料的是它为整个配对范围计算一个分数,但我希望它是每对的(如果我将公式修改为单行,例如 A1:A1 而不是 A1:A3 那么它给出的结果略有不同)。
  • 嗨,对不起,事实证明它实际上不能正常工作(两个版本都没有)。要进行测试,请考虑两个时期:01/01/15 到 31/12/15 ..您的公式给出了 11.77 的分数,而它应该正好是 12。这是为什么?我认为这可能是因为您将结束时间排除在外,但即使我将结束日期更改为 2016 年 1 月 1 日,它也会给我 11.81
  • 这些日期是否在一行中?还是这里涉及到 12 行?
  • 是的,它们在一行,意味着 A1 是开始日期,B1 是结束日期。
【解决方案3】:

你为什么不使用:

=12*YEARFRAC(StartDate,EndDate)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多