匹配两个表之间的条件以查找列表中的最大日期

时间:2017-10-06 23:06:47

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

我有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. 表1列D和表2第1行之间Names的匹配
  2. 表1中的
  3. Dates在表2列C中为< = Dates 使用以下公式
  4. 我目前的公式=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中的&gt; = Dates列C.在这种情况下,我想要最小匹配(最古老的日期)。我假设我只是使用MIN代替MAX吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,我会在第一个问题上给出答案。

为了使样本更容易,我将所有内容放在一张纸上。一旦您对结果满意,您就可以复制到新表格。这样你就可以得到工作公式。

我从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)))),"")

对于第二个问题,我会留给你从这两个问题中找出来,这应该可以解决问题。

答案 1 :(得分:0)

我自己用MAXIFS解决了最大日期和多标准VLOOKUP功能

根据名称匹配

找到小于当前行的最大日期

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

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

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