拉出并比较excel中的日期

时间:2015-06-19 13:49:03

标签: excel vba if-statement excel-formula excel-match

例如:

在我的第一个标签Last visit上,我有列Customer NameCustomer #Scheduled date

在我的第二个标签All visits上,我有Customer NameCustomer #Visit Dates。现在,此选项卡显示所有访问日期(即使是Last visit上的最后一个),而第一个标签只显示其上次访问日期和下一个计划日期。

目标:在我的第一个标签Last Visit上,我需要一些逻辑,将预定的访问日期与所有访问日期进行比较..针对该特定客户ID。因此,在Scheduled date之后的下一列中,我想要一个新列Last visit date,用于比较该特定客户上次访问日期之前的访问。因此,有些客户有多次访问,我需要每个客户的每个单元格(这个商店超过300个)来阅读他们访问过的所有时间,并且只从最近(最近但不是他们最后一次访问的那个)拉出最大值第二个标签All visits

我希望所有访问次数第二大的原因是因为在all visits标签中,即使是在其中输入了预定日期。

示例:选项卡1:

Billy Joe    12345     1/02/15       <-- Scheduled visit    new column    --> visit before last visit

Custmer2      Id2       Date

EtcTab 2:

  Billy Joe    12345     03/15/14

  Billy Joe    12345     04/15/14

  Billy Joe    12345     1/02/15

所以我希望约会4/15/14而不是其他两个..

我有一个适用于MOST客户的部分方程式。方程的问题是:

如果客户每月访问次数超过一次,它仍然是所有访问次数的第二高日期。如何检查以确保上次访问前的访问次数少于他们的访问次数上次访问

这是我的等式:

  

{= LARGE(IF(('所有访问'!B:B ='上次访问'!B2),('所有访问'!C:C)),2)}

B2对应于客户ID(在其他页面上与其ID匹配,因此当我将其向下拖动时,它只会继续匹配ID)...

问题的一个例子:

6/3/2015
6/18/2015
6/26/2015
6/9/2015

请注意每月有多次访问,所以即使他们在那个月的预定访问次数少于他们的last visit,我的等式也会将6/18/2015放在所有地点。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,我们需要做的就是在LARGE函数中添加额外的数组条件。

根据客户ID,您已经获得了第二大。但我们希望基于客户ID 的第二大基于预定日期:

=LARGE(('All visits'!B:B='Last visit'!B1)*('All visits'!C:C>0)*(IF('All visits'!C:C<='Last visit'!C1,'All visits'!C:C)),2)
         ^^^^^^^^^ Customer ID  ^^^^^^^^    ^^ignore blanks^^    ^^^^ Only grab the dates that are <= last visit ^^^^   ^ 2nd largest

编辑以添加额外检查,以确定客户何时只有1个访问日期:

如果我们希望它显示#N/A如果日期少于两个,我们必须使用SUMPRODUCT来获取总条目数:

SUMPRODUCT(('All visits'!B:B='Last visit'!B1)*('All visits'!C:C>0)*('All visits'!C:C<='Last visit'!C1))

然后,我们可以将其添加到IF语句中,以返回NA()案例的<2>=2案例的原始公式:

=IF(SUMPRODUCT(('All visits'!B:B='Last visit'!B1)*('All visits'!C:C>0)*('All visits'!C:C<='Last visit'!C1))<2,NA(),LARGE(('All visits'!B:B='Last visit'!B1)*('All visits'!C:C>0)*(IF('All visits'!C:C<='Last visit'!C1,'All visits'!C:C)),2))

您可以将NA()更改为符合您要求的内容