【问题标题】:pulling and comparing dates in excel在excel中提取和比较日期
【发布时间】:2015-09-05 12:52:36
【问题描述】:

例如:

在我的第一个标签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 而不是其他两个..

我有一个适用于大多数客户的部分方程。方程的问题是:

如果客户每月访问一次以上,它仍然会拉出他/她所有访问的第二高日期。我如何检查以确保上次访问之前的访问必须少于他们的上次访问

这是我的方程式:

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

B2 对应于客户 id(它与其他页面上的 id 匹配,所以当我将其向下拖动时,它会继续匹配 id)...

问题示例:

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

请注意每月有多次访问,因此我的等式会将 2015 年 6 月 18 日放在所有位置,即使他们在该月的预定访问次数会少于他们的 last visit

【问题讨论】:

  • 改进的格式和更新的标签
  • @Ram 为什么要删除match
  • @chancea match 非常通用,excel-match 不存在所以我认为excel-formulamatch 更好。我创建并添加了excel-match。好点了吗?
  • @Ram 不不,我同意(不需要添加标签)我只是想知道。我正在考虑自己删除它,但我不知道是否有足够好的理由,所以当我看到你这样做时,我只是好奇。
  • 哦,好吧,我先留下新标签,如果没有人经常使用标签,那么它将是automatically removed by the system

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


【解决方案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() 用于 &lt;2 案例或我们的原始公式用于 &gt;=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() 更改为符合您要求的任何内容

【讨论】:

  • 非常感谢!这非常有效。有没有办法添加另一项检查以确保提取的数据的日期大于“1/0/1990”?问题是:如果客户没有 2 次访问,它会说他们的最后一次访问是“1/0/1990”。我宁愿它只是出现 #N/A 之类的,因为我正在做一些条件格式和一些 vlookup 来计算访问之间的天数,并且弹出为 30,000 天左右。
  • 哇@chancea ...你太棒了!非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多