我有一个带有一些id的excel行。我想从下面第二个表中的第一个表中查找id,并获取带有最大日期的id。输出应该只来自表1中行的id。
作为参考,“ID1”在单元格A1中,“ID”在单元格A4中。
我发布了一个类似的问题here,但我的要求发生了变化,并希望再次发布此问题。 @rwilson在之前的帖子中给了我一个有效的创意公式,但我没有说明表2中会有重复。在下面的表2中,“b”出现两次但是日期不同。以下数据样本行的公式输出应为“b”,因为它具有最大日期。我不能以任何方式对表格进行排序,因为我无法控制它。我需要引用它来输出带有最新日期的id。
ID1 ID2 ID3 ID4 id of maxdate
b a c #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。原因是索引基于最大日期。由于最大日期出现在d中,索引输出d默认为d。有没有办法告诉索引/匹配只对表1中出现的id进行索引/匹配?
ID1 ID2 ID3 ID4 id of maxdate
b a c #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))
更新#2 这是基于@XOR公式的输出。这是一个不起作用的情况。
ID1 ID2 ID3 ID4 id of maxdate
b a d #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
答案 0 :(得分:1)
修改强>:
如果作为数组公式(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))
它基于重复以下公式,该公式在单元格A2中找到条目的最大日期(如果作为数组公式输入):
=MAX(IF($A$4:$A$8=A2,$B$4:$B$8,0))
使用Ctrl + Shift + Enter(数组公式)输入。
将其组合几次,然后执行INDEX()
/ MATCH()
查找,您就可以获得该ID。你需要弄清楚如何处理相等的最大日期。
答案 1 :(得分:0)
我总是使用我称之为MAXAIF的功能。您可以将其添加到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
<强>更新强>
根据反馈,显然这里需要返回附有最大日期的id以及日期。以下是适应该功能的功能。如果最后一个参数设置为true,则返回id;如果设置为false,则返回最大日期。
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
答案 2 :(得分:0)
您可以使用MAX()
和IF()
函数查找ID1,ID2,ID3,ID3列中每个ID的max_date,然后再次使用MAX()
查找4个值中的max_date < / p>
为每个ID选择max_date(使用CTRL + SHIFT + ENTER输入):
{MAX(IF(A3:A100=H3,F3:F100))}
在4个max_date:
中选择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()
函数查找具有max_date
=INDEX(A:A,MATCH(L3,F:F,0))