Excel数组查找

我有一个有一些id的excel行。 我想从下面第二张表的第一个表中查找id,并获取最大date的id。 输出只能来自表1中行中的id。

作为参考,“ID1”在单元格A1中,“ID”在单元格A4中。

我在这里发布了一个类似的问题,但我的要求改变了,想再次发布。 @rwilson在之前的文章中给了我一个有用的创造性的公式,但我没有表明在表2中会有重复。在下面的表2中,“b”出现了两次,但是具有不同的date。 下面的示例行数据的公式输出应该是“b”,因为它具有最大date。 我无法以任何方式对表格进行sorting,因为我无法控制它。 我需要引用它输出最新的date的id。

ID1 ID2 ID3 ID4 id of maxdate bac #N/A formula ID Date b 1/26/2015 b 1/28/2015 a 1/26/2015 d 1/29/2015 c 1/27/2015 

已更新的样本数据此数据样本使用下面的@ Marc公式。 输出应该是b,但是显示为d。 原因是该指数是基于最大date。 由于最大date出现在d中,因此默认情况下,索引输出d。 有没有办法告诉索引/匹配只对表1中出现的ID的索引/匹配?

 ID1 ID2 ID3 ID4 id of maxdate bac #N/A d (should be b) ID Date b 1/26/2015 c 1/26/2015 a 1/26/2015 d 1/28/2015 b 1/28/2015 

作为参考,表格1开始于单元格A1,表格2开始于单元格A4。 这里是单元格E2中的公式。

=INDEX($A$4:$A$9,MATCH(MAX(IF($A$4:$A$9=IFERROR(A2,""),$B$4:$B$9,0),IF($A$4:$A$9=IFERROR(B2,""),$B$4:$B$9,0),IF($A$4:$A$9=IFERROR(C2,""),$B$4:$B$9,0),IF($A$4:$A$9=IFERROR(D2,""),$B$4:$B$9,0)),$B$4:$B$9,0))

UPDATE#2这是基于@ XOR公式的输出。 这是一个不起作用的情况。

 ID1 ID2 ID3 ID4 id of maxdate bad #N/A b (should be a) ID Date b 1/26/2015 c 2/26/2015 a 1/31/2015 d 1/29/2015 b 1/30/2015 

=IF(SUMPRODUCT(COUNTIF(A2:C2,A5:A9)),LOOKUP(1,0/FREQUENCY(0,1/(1+(B5:B9=AGGREGATE(14,6,B5:B9/(COUNTIF(A2:C2,A5:A9)>0),1)))),A5:A9),"No Matching ID")

顺便说一下,如果两个或多个ID共享最大date并且出现在Table1中,则不指定哪个应该是首选?

问候

编辑

如果以数组公式formsinput(Ctrl + Shift + Enter),应该会得到答案:

 =INDEX($A$4:$A$8,MATCH(MAX(IF($A$4:$A$8=A2,$B$4:$B$8,0),IF($A$4:$A$8=B2,$B$4:$B$8,0),IF($A$4:$A$8=C2,$B$4:$B$8,0)),$B$4:$B$8,0)) 

它基于重复以下公式,该公式find单元格A2中条目的最大date(如果作为数组公式input):

 =MAX(IF($A$4:$A$8=A2,$B$4:$B$8,0)) 

用Ctrl + Shift + Enter(数组公式)input。

结合几次,然后做一个INDEX() / MATCH()查找,你可以得到ID。 你需要弄清楚如何处理相等的最高date。

我总是使用我称之为MAXAIF的function。 您可以将其添加到VBA模块中并在电子表格中使用它。

 Function MAXAIF(ByVal id As Range, ByVal Criteria_Range As Range, ByVal Lookup_Range As Range) Dim max Dim ct As Integer For ct = 1 To Criteria_Range.Cells.Count If Criteria_Range.Cells(ct, 1).Value = id.Value Then If max = Empty Then max = Lookup_Range.Cells(ct, 1).Value Else If max < Lookup_Range.Cells(ct, 1).Value Then max = Lookup_Range.Cells(ct, 1).Value End If End If End If Next MAXAIF = max End Function 

UPDATE

根据反馈,显然这里需要返回带有最大date的id以及date。 以下是一个将适应这个function。 如果最后一个参数设置为true,则返回该id,而如果设置为false,则返回最大date。

 Function IdWithGreatestDate(ByVal id As Range, ByVal Criteria_Range As Range, ByVal Lookup_Range As Range, return_id As Boolean) Dim max Dim max_index Dim ct As Integer For Each cell In id For ct = 1 To Criteria_Range.Cells.Count If max = Empty Then max_index = ct max = Lookup_Range.Cells(ct, 1).Value Else If max < Lookup_Range.Cells(ct, 1).Value Then max_index = ct max = Lookup_Range.Cells(ct, 1).Value End If End If Next Next If return_id Then IdWithGreatestDate = Criteria_Range(max_index, 1).Value Else IdWithGreatestDate = Lookup_Range(1, max_index).Value End If End Function 

您可以使用MAX()IF()函数为列ID1,ID2,ID3,ID3中的每个ID查找max_date,然后再次使用MAX()来查找4个值中的max_date

为每个IDselectmax_date(使用CTRL + SHIFT + ENTERinput):

 {MAX(IF(A3:A100=H3,F3:F100))} 

SELECT max_date中的4个max_date:

 {=MAX(MAX(IF(A3:A100=H3,F3:F100)),MAX(IF(A3:A100=I3,F3:F100)),MAX(IF(A3:A100=J3,F3:F100)),MAX(IF(A3:A100=K3,F3:F100)))} 

然后使用MATCH() | INDEX() MATCH() | INDEX()函数查找具有max_date的ID

 =INDEX(A:A,MATCH(L3,F:F,0))