Excel中多行之间的日期差异

Excel中多行之间的日期差异,excel,vba,Excel,Vba,我有用户ID、事件ID和日期,我需要检查哪些事件是真实的 真实事件是每个用户的第一个事件,每个事件至少在最后一个真实事件之后10天 我所做的是按用户ID和日期对它们进行排序,并使用此公式计算当前事件和上一个事件之间的日期差,而不是上一个真实事件之间的日期差 比如,如果我有一个用户在01 05和13的事件,它会给我1,0,0,但我需要与上一个实际事件(在01)进行比较,它应该给我1,0,1 我该怎么做呢 | USER ID | EVENT ID | DATE | What I

我有用户ID、事件ID和日期,我需要检查哪些事件是真实的

真实事件是每个用户的第一个事件,每个事件至少在最后一个真实事件之后10天

我所做的是按用户ID和日期对它们进行排序,并使用此公式计算当前事件和上一个事件之间的日期差,而不是上一个真实事件之间的日期差

比如,如果我有一个用户在01 05和13的事件,它会给我1,0,0,但我需要与上一个实际事件(在01)进行比较,它应该给我1,0,1

我该怎么做呢

| USER ID  | EVENT ID  |    DATE      |  What I get   | What I should get |    
|:---------|:---------:|:------------:| :------------:|:------------:     |
| 1        |        4  |  01.01.2020  |       1       |       1           |
| 1        |        5  |  05.01.2020  |       0       |       0           |
| 1        |        6  |  13.01.2020  |       0       |       1           |
| 2        |        7  |  03.01.2020  |       1       |       1           |
| 2        |        8  |  05.01.2020  |       0       |       0           |
| 2        |        9  |  06.01.2020  |       0       |       0           |
用户的事件数不是固定的


下面是VBA中的一个解决方案

Sub Button1_Click()
'data
Cells.Clear
[a2:b7] = [{1,1;1,5;1,13;2,3;2,5;2,6}]
'code
lre = [b2]
For i = 2 To 7
  If Cells(i, 1) <> Cells(i - 1, 1) Then
    Cells(i, 3) = 1
  ElseIf Cells(i, 2) - lre >= 10 Then
    Cells(i, 3) = 1
    lre = Cells(i, 2)
  Else
    Cells(i, 3) = 0
  End If
Next i
End Sub
子按钮1\u单击()
"数据,
牢房,没问题
[a2:b7]=[{1,1;1,5;1,13;2,3;2,5;2,6}]
“代码
lre=[b2]
对于i=2到7
如果单元格(i,1)单元格(i-1,1),那么
单元(i,3)=1
ElseIf单元(i,2)-lre>=10然后
单元(i,3)=1
lre=单元(i,2)
其他的
单元(i,3)=0
如果结束
接下来我
端接头
它使用与公式相同的逻辑,但使用
lre
变量存储最后一个真实事件的日期


下面是VBA中的一个解决方案

Sub Button1_Click()
'data
Cells.Clear
[a2:b7] = [{1,1;1,5;1,13;2,3;2,5;2,6}]
'code
lre = [b2]
For i = 2 To 7
  If Cells(i, 1) <> Cells(i - 1, 1) Then
    Cells(i, 3) = 1
  ElseIf Cells(i, 2) - lre >= 10 Then
    Cells(i, 3) = 1
    lre = Cells(i, 2)
  Else
    Cells(i, 3) = 0
  End If
Next i
End Sub
子按钮1\u单击()
"数据,
牢房,没问题
[a2:b7]=[{1,1;1,5;1,13;2,3;2,5;2,6}]
“代码
lre=[b2]
对于i=2到7
如果单元格(i,1)单元格(i-1,1),那么
单元(i,3)=1
ElseIf单元(i,2)-lre>=10然后
单元(i,3)=1
lre=单元(i,2)
其他的
单元(i,3)=0
如果结束
接下来我
端接头
它使用与公式相同的逻辑,但使用
lre
变量存储最后一个真实事件的日期


请在帖子中以表格形式包含一些测试数据,并提供预期的输出。尝试使其看起来像表格,但无法正常工作。如果可以的话,添加了屏幕截图?现在您可以(如果您愿意)删除屏幕截图…这与您的输出不匹配:
=if(A1A2,1,0)
-如果从D1开始,则得到0,0,1,0,0,1,如果从D2开始,则得到“”,0,0,1,0,0.A1是用户id,A2是1,是A1,我不知道这样使用是否正确,但它是有效的。请在帖子中以表格形式包含一些测试数据,并提供预期的输出。尝试使其看起来像表格,但它就是不起作用。如果可以的话,添加了屏幕截图?现在您可以(如果您愿意)删除屏幕截图…这与您的输出不匹配:
=if(A1A2,1,0)
-如果从D1开始,则得到0,0,1,0,0,1,如果从D2开始,则得到“”,0,0,1,0,0.A1是用户id,A2是1,是A1,我不知道这样使用它是否正确,但它是有效的。如果日期是
01-01,13-01,25-01这将失败,因为13-01也将是一个“真实”事件?如果(A2A1;1;如果(C2-$C$1>=10;1;0))这将使它与第一个事件进行比较,我需要将它与最后一个真实事件进行比较。@luk;它不会在那里失败,因为25-01>=10。我认为这将做得很好,因为我不喜欢手动输入数组,因为有70万行如果日期是
01-01,13-01,25-01
这将失败,因为13-01也将是一个“真实”事件?如果(A2A1;1;如果(C2-$C$1>=10;1;0)),这将使它与第一个事件相比,我需要将它与上一个真实事件进行比较。@Luuk;它不会在那里失败,因为25-01>=10。我认为这会做得很好,虽然我不喜欢手动输入数组,因为有70万行