在日期和时间之间的标识

时间:2015-11-10 18:21:52

标签: excel date time countif

EXCEL COUNT IFS代码日期和时间之间。

带公式的图像示例:Image with Formula

  1. 我在A列中有一个名为日期IN(xx / xx / xxxx)的范围,在C栏中有一个日期OUT。
  2. 列B中的时间输入(XX:XX)和列D中的时间输出。
  3. 我的录取日期在E列。
  4.   

    如何在G:AB栏中按小时8-9,9-10等建立目标,查看E栏中的日期并使用日期范围计算时间输入和超时之间的时间?

1 个答案:

答案 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列是分开的。