假设时间流程细分为期间:
请注意,每个期限为6个月。
问题
现在假设给出了两个日期A和B.
你能提供一个表达式(封闭式),来计算 期数,其中A在第一个范围内,B在最后一个范围内 周期?
'封闭式' ::创建一个程序并不是她的选择。
让我们详细了解
让...
...因此
...因此
由于
答案 0 :(得分:0)
尝试查看VBA函数DateDiff https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/datediff-function
答案 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(或任何单元格)中参考上面的代码:
答案 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)并减去这两个值。