Подсчет количества экземпляров по разнице дат (Excel / VBA) - PullRequest
0 голосов
/ 23 марта 2020

У меня есть следующие данные:

Снимок экрана таблицы Excel

То есть:

Идентификатор получателя || | ID цели (не полезно) ||| Дата

123 ||| 456 ||| 20/01/2020

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

Я хотел бы получить дополнительную колонку, в которой для каждого покупателя у меня есть счет, сколько приобретений он совершил за последние 3 года. Поэтому для каждого идентификатора покупателя с указанной датой мне необходимо подсчитать, сколько раз этот идентификатор появляется с датой менее 3 лет от этой даты.

Таким образом, если приобретатель совершил приобретение в 2020 г., 2016 г. , 2015 и 2014, в каждом случае счет будет равен 0, 2, 1, 0 соответственно для данного данного покупателя.

Я пробовал с COUNTIFS (), IF (), VLOOKUP (), но Я не смог получить требуемый результат, так как после выполнения условия он суммирует все идентификаторы независимо от дат.

Я также пытался написать макрос на 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

Любая помощь действительно приветствуется, спасибо заранее.

1 Ответ

1 голос
/ 23 марта 2020

Для Acquirer в A2: A10 и Dates в C2: C10 эта формула входит в D2 и подсчитывает количество записей, в которых выполняются все следующие условия:

  • Идентификатор Acquirer совпадает с A2
  • Дата меньше даты в C2
  • Дата больше или равна 3 годам до даты в C2

=COUNTIFS($A$2:$A$10,A2,$C$2:$C$10,"<"&C2,$C$2:$C$10,">="&EDATE(C2,-36))

enter image description here

...