计算所有列中仅具有特定日期值的行

Count rows that only have cetrain date values in all colums

所以我是一个完整的 VBA 新手,我有点需要帮助来解决似乎需要 Excel VBA 脚本的问题。 我得到了一个包含大量日期和其他值的 Excel 图表。我需要找到所有日期早于当前日期的行(假设当前日期是 23.03.2022),该行中的所有日期都需要更早,并且只需要是该行中的日期,因为要计算的行。最后我需要找出有多少行并将该数字粘贴到某个单元格中。

因此,例如在最后 id 得到输出,即有 1 行的日期早于当前行。因为其他行至少有一个未来日期、至少一个空单元格或包含日期以外内容的单元格。

我已经尝试了 excel 函数的 cetrain nubers,我也尝试制作单独的图表和函数的子步骤,但我没有让它工作。所以我想我给 VBA 一个机会,但我除了 Java 一个 C+ 之外没有任何经验。

计算日期行 UDF

  • 计算一个区域中所有单元格都包含早于给定日期的日期的行数。

  • 如果没有给定日期,则使用今天的日期。

  • 如果一行中的单元格包含任何非日期的内容,则为 'disqualified'。

  • 在Excel中使用(根据贴图)

    =CountDateRows(B2:D4)
    =CountDateRows(B2:D4,DATE(2022,3,22))
    =CountDateRows(Sheet2!B2:D4,DATE(2022,3,22))
    =CountDateRows(Sheet2!B2:D4,A1) ' A1 contains a date
    

标准模块中的代码,例如Module1

Option Explicit

Function CountDateRows( _
    ByVal rg As Range, _
    Optional ByVal InitialDate As Variant) _
As Long
    
    If IsMissing(InitialDate) Then InitialDate = Date
    
    Dim rCount As Long: rCount = rg.Rows.Count
    Dim cCount As Long: cCount = rg.Columns.Count
    
    Dim Data As Variant
    
    If rCount + cCount = 2 Then
        ReDim Data(1 To 1, 1 To 1): Data(1, 1).Value = rg.Value
    Else
        Data = rg.Value
    End If
    
    Dim cValue As Variant
    Dim r As Long
    Dim c As Long
    Dim fCount As Long ' Number of Found Rows
    Dim IsOk As Boolean
    
    For r = 1 To rCount
        For c = 1 To cCount
            cValue = Data(r, c)
            If IsDate(cValue) Then
                If cValue < InitialDate Then IsOk = True
            End If
            If IsOk Then IsOk = False Else Exit For
        Next c
        If c > cCount Then fCount = fCount + 1
    Next r
    
    CountDateRows = fCount
    
End Function