用于计算两个日期之间的句点数的函数

时间:2017-10-02 13:50:05

标签: vba

假设时间流程细分为期间

  • 第1期从8月开始到1月结束
  • 第2期从2月开始到7月结束

请注意,每个期限为6个月。

问题

  

现在假设给出了两个日期A和B.

     

你能提供一个表达式(封闭式),来计算   期数,其中A在第一个范围内,B在最后一个范围内   周期?

     

'封闭式' ::创建一个程序并不是她的选择。

让我们详细了解

让...

  • A 是2015年3月2日
  • B 是2018年1月15日

...因此

  • A是2015年2月开始的第2期的一部分。
  • B是2017年8月开始的第1期的一部分。

...因此

  • A和B之间的时差差异为6。

由于

  • 2月开始的时期2 2015
  • 2015年8月开始的第1期
  • 2月开始的时段2 2016
  • 2016年8月开始的第1期
  • 2月开始的时段2 2017
  • 2017年8月开始的第1期

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

测试你的功能的代码。在VBA编辑器中插入模块,并在其中输入以下代码:

Option Explicit
Public Function CountPeriods(startDate As Date, endDate As Date) As Long
    Dim diffMonths As Long
    Dim diffPeriods As Long

    diffMonths = DateDiff("m", startDate, endDate)
    diffPeriods = diffMonths \ 6
    CountPeriods = diffPeriods
End Function

现在输入您的开始和结束日期,并在单元格B1(或任何单元格)中参考上面的代码:

enter image description here

答案 2 :(得分:0)

作为公式(假设您的日期在A2和B2中):

=(YEAR(EDATE(A2;-1))*2+INT((MONTH(EDATE(A2;-1))-1)/6)) - (YEAR(EDATE(B2;-1))*2+INT((MONTH(EDATE(B2;-1))-1)/6))

作为VBA功能:

Function datePeriods(ByVal d1 As Date, ByVal d2 As Date) As Long
    d1 = DateAdd("m", -1, d1)
    d2 = DateAdd("m", -1, d2)
    Dim p1 As Long, p2 As Long
    p1 = Year(d1) * 2 + ((Month(d1) - 1) \ 6)
    p2 = Year(d2) * 2 + ((Month(d2) - 1) \ 6)
    datePeriods = p2 - p1
End Function

基本理念是"移动"到一年的第一年和第二年的时期,然后计算年份的数值(year * 2)和"半年" (整数除以6)并减去这两个值。