如何在G:AB栏中按小时8-9,9-10等建立目标,查看E栏中的日期并使用日期范围计算时间输入和超时之间的时间?
答案 0 :(得分:0)
工作表的性质日期输入和日期输出可能会持续多天,因此会使您的CountIf公式变得非常复杂。因为你必须结合A和B,以及C和D,才能完全理解它所指的日期。
你应该创建一个自定义的VBA函数,否则它将使用excel的本机函数变得非常复杂。
步骤1)将第1行G列更改为7:00:00 AM,然后将其扩展到AD列(一直到6:00:00 AM。
步骤2)按Alt + F11并在左侧插入一个新模块。复制并粘贴此代码:
Public Function CountTimeSlots(ByVal DateIn As Range, ByVal TimeIn As Range, _
ByVal DateOut As Range, ByVal TimeOut As Range, _
ByVal DateMatch As Range, ByVal TimeMatch As Range) As Integer
Dim start As Date
Dim finish As Date
Dim match As Date
Dim i As Integer
'Initialize to 0
CountTimeSlots = 0
For i = 1 To DateIn.Rows.Count
'Combine Column A and B into a singular date
start = CDate(DateIn.Cells(i, 1).Value) + CDate(TimeIn.Cells(i, 1).Value)
'Combine Column C and D into a singular date
finish = CDate(DateOut.Cells(i, 1).Value) + CDate(TimeOut.Cells(i, 1).Value)
'Combine Column E and the vertical time stamp; Note these Match values are hardcoded to one cell
match = CDate(DateMatch.Cells(1, 1).Value) + CDate(TimeMatch.Cells(1, 1).Value)
'If the match value falls between the In and Out time, increment by 1
If (match >= start And match <= finish) Then
CountTimeSlots = CountTimeSlots + 1
End If
Next i
End Function
步骤3)在单元格G2中使用公式。然后将其向右和向下(或向下然后向右)延伸。
=CountTimeSlots($A$2:$A$7,$B$2:$B$7,$C$2:$C$7,$D$2:$D$7,$E2,G$1)
步骤4)我建议你交换E和F列,或者删除F列。乍看之下,E列中的日期与A-D列是分开的。