【问题标题】:Match criteria between two tables to find maximum date within a list匹配两个表之间的条件以查找列表中的最大日期
【发布时间】:2018-03-18 19:27:24
【问题描述】:

我有 2 个数据表,一个只有 5 列,第二个是 100 列,但简单来说,它们具有以下格式。两者都有数百行。

表1(按升序排序,所有列)

        A       B       C       D       E
    1   Date    TeamF   Trans   Name    TeamT
    2   date1   teamF1  trans1  name1   teamT1
    3   date2   teamF2  trans2  name2   teamT2
    4   date3   teamF3  trans3  name3   teamT3
    5   date4   teamF4  trans4  name4   teamT4
    6   date5   teamF5  trans5  name5   teamT5

表2(未以任何方式排序)

        A       B       C       D       E       F       G       ,etc.
    1   Team    Game    Date    Opp     NameA   NameB   NameC   ,etc...
    2   team1   game1   date1   opp1    statsA1 statsB1 statsC1 ,etc...
    3   team2   game2   date2   opp2    statsA2 statsB2 statsC2 ,etc...
    4   team3   game3   date3   opp3    statsA3 statsB3 statsC3 ,etc...
    5   team4   game4   date4   opp4    statsA4 statsB4 statsC4 ,etc...
    6   team5   game5   date5   opp5    statsA5 statsB5 statsC5 ,etc...

我一直在尝试让我通常使用(如下)更复杂的INDEX/MATCH 公式来避免我在数据处理中遇到的一些错误。我正在尝试从表 1 中提取 TeamT 名称并填充表 2、E 列及以后的 stats 行。我这样做是基于一个

  1. Names 在 Table1 D 列和 Table 2 第 1 行之间匹配
  2. 表 1 中的 Dates 是 Dates 用下面的公式

我目前的公式=INDEX(Table1!$A:$E,MATCH(1,(Table1!$D:$D=Table2!E$1)*(Table1!$A:$A<=Table2!$C2),0),5)

您可能会看到,如果表 1 中有多个日期小于 C2,我只会得到第一个。我真正想要的是最大的(最新的)。我一直在玩MAX/IF 语句和INDEX/MATCH/IF 语句,但无法得到正确的结果。下面是这些失败尝试的一些示例

示例 1 =MAX(IF(Table1!$D:$D=Table2!E$1,IF(Table1!$A:$A<=Table2!$C2,Table1!$E:$E)))

示例 2 =INDEX(Table1!$E:$E,MATCH(MAX(IF(Table1!$D:$D=Table2!E$1,Table1!$A:$A<=Table2!$C2)),IF(Table1!$D:$D=Table2!E$1,Table1!$A:$A<=Table2!$C2),0))

任何帮助将不胜感激。我已经尝试了很多我找到的解决方案,但我仍然在这个问题上大发雷霆。

我还有第二个公式变体,我根据表 1 中的 Dates 匹配日期,在表 2 列 C 中 >= Dates。在这种情况下,我想要最小匹配(最早的日期)。我假设我会简单地使用MIN 而不是MAX

【问题讨论】:

    标签: excel excel-formula excel-2010 excel-match


    【解决方案1】:

    如果我理解正确,这里我有你第一个问题的答案。

    为了简化示例,我将所有内容都放在一张纸上。对结果满意后,您可以复制到新工作表。这样你就有了有效的公式。

    我从cell K2使用的数组公式(点击Ctrl + Shift + Enter 是:

    =IFERROR(INDEX($E$2:$E$11,MATCH(MAX(IF(--($D$2:$D$11=K$1)*--($A$2:$A$11<$I2)*$A$2:$A$11,$A$2:$A$11)),IF(--($D$2:$D$11=K$1)*--($A$2:$A$11<$I2)*$A$2:$A$11,$A$2:$A$11),0)),"")
    

    您可以将其拖到您需要的字段中。请注意这一点以查找最新日期。因为我不是 100% 确定这就是你要找的。因此,在cell O2 的示例中,我设法找到了最新的行,公式(正则公式)为:

    =IFERROR(INDEX($E$2:$E$11,LOOKUP(2,1/(--($D$2:$D$11=O$1)*--($A$2:$A$11<$I2)),(ROW($E$2:$E$11)-ROW(O$1)))),"")
    

    对于第二个问题,我将留给你从这两个中找出答案。

    【讨论】:

    • 非常感谢。您的解决方案可以找到一个日期,但并不总是最新的。在使用 MAXIFS 函数查找最新日期后,我发现了一个新的解决方案,并将其与多条件 VLOOKUP 函数配对。我会在这里的帖子中发布结果。
    • 太糟糕了,我的 Excel 没有 MAXIFS 来测试。但是数组公式(第一个公式或columns K, L and M 中使用的公式)应该适合您的情况。但我注意到一个区别是您的问题/答案中的 &lt;= 我错过了公式中的 = 符号。或者您介意提供一些示例,以便我知道我的公式中的问题出在哪里,以便下次改进?
    【解决方案2】:

    我自己用 MAXIFS 解决了这个问题,以找到最大日期和多条件 VLOOKUP 函数

    这会根据名称匹配找到小于当前行的最大日期

    =VLOOKUP(MAXIFS(Table1!$A:$A,Table1!$D:$D,E$1,Table1!$A:$A,"&lt;="&amp;$C2)&amp;E$1,CHOOSE({1,2},Table1!$A:$A&amp;Table1!$D:$D,Table1!$E:$E),2,0)

    基于名称匹配的最小日期大于当前行的解决方案是

    =VLOOKUP(MINIFS(Table1!$A:$A,Table1!$D:$D,E$1,Table1!$A:$A,"&gt;="&amp;$C2)&amp;E$1,CHOOSE({1,2},Table1!$A:$A&amp;Table1!$D:$D,Table1!$B:$B),2,0)

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 2012-07-28
      • 2016-09-25
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多