【问题标题】:Counting number of instances according to date difference (Excel/VBA)根据日期差异计算实例数(Excel/VBA)
【发布时间】:2020-07-03 13:20:13
【问题描述】:

我有以下数据:

Excel Table Screen Capture

即:

收购方 ID ||| 目标 ID(无用)||| 日期

123 |||第456章 ||| 20/01/2020

789 ||| 910 ||| 28/02/2019

我想要一个额外的列,我可以在其中为每个收购者计算过去 3 年中进行了多少次收购。 因此,对于具有给定日期的每个收单方 ID,我需要计算该 ID 在距离该日期不到 3 年的日期出现的次数。

因此,如果收购方在 2020 年、2016 年、2015 年和 2014 年进行收购,则在每种情况下,该收购方的计数将分别为 0、2、1、0。

我尝试过使用 COUNTIFS()、IF ()、VLOOKUP(),但我无法得到想要的结果,因为一旦满足条件,它就会对所有 ID 求和,而与日期无关。

我也尝试在 VBA 上编写宏,但我的语言知识基本上是 0。我发布代码以防它更好地了解问题


Dim Sheet As Worksheet

Set dbs = ThisWorkbook.Sheets("db")

Dim i As Integer, j As Integer, count As Integer

lr = dbs.Cells(Rows.count, 1).End(xlUp).Row 
x = 0


For i = 2 To lr
    For j = i + 1 To lr
    Set myrange = Range("i:lr")
        If dbs.Cells(i, 4).Value - Application.WorksheetFunction.VLookup(dbs.Cells(i, 4).Value, myrange, 4, False) < 3 Then
        'I get a bug with Application.WorksheetFunction.VLookup, it might be that an error must be dealt with in case of missing values
        count = count + 1
        End If
    Next j
Next i

dbs.Cells(i, 5).Value = count

End Sub

非常感谢任何帮助,提前谢谢您。

【问题讨论】:

    标签: excel vba for-loop vlookup counting


    【解决方案1】:

    对于 A2:A10 中的收单方和 C2:C10 中的日期,此公式进入 D2 并计算满足以下所有条件的记录数:

    • 收单方 ID 与 A2 相同
    • 日期小于 C2 中的日期
    • 日期大于或等于 C2 中日期的 3 年

    =COUNTIFS($A$2:$A$10,A2,$C$2:$C$10,"&lt;"&amp;C2,$C$2:$C$10,"&gt;="&amp;EDATE(C2,-36))

    【讨论】:

    • 谢谢!它确实有效。我尝试了一些与 COUNTIFS(DATE.DIFF()) 的组合,但这只会返回零
    猜你喜欢
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多