Excel - 只选择一个最大值

Excel - Selecting Only One Max Value

我有一个如下所示的数据集。 E 列将是我的公式列。对于 ID 包含该状态的最大概率的行,我希望 E 列读取 "Max"。如果同一州的两个 ID 具有相同的概率,如在马里兰州,我希望 "Max" 显示日期最近的 ID。如果两个 ID 在概率和日期上都匹配,那么我希望 "Max" 在每组状态中只出现一个 ID。

    Column A       Column B     Column C    Column D    Column E
    State        Probability       Date        ID       Formula Field
    California        10%       12/31/2016    123   
    California        20%       1/7/2017      129   
    California        23%       1/14/2017     135       Max
    Colorado          26%       1/21/2017     141   
    Colorado          38%       12/31/2016    147       Max
    Illinois          44%       1/14/2017     153       Max
    Illinois          44%       1/14/2017     159   
    Illinois          20%       1/21/2017     165   
    Illinois          35%       1/28/2017     171   
    Maryland          41%       2/4/2017      177   
    Maryland          41%       12/31/2016    183       Max
    Maryland          35%       1/7/2017      189   
    Michigan          20%       1/14/2017     195   
    Michigan          35%       1/21/2017     201   
    Michigan          38%       1/28/2017     207       Max
    West Virginia     41%       2/4/2017      213   
    West Virginia     44%       2/11/2017     219       Max

这可能会有所帮助,但有点麻烦。函数的 return 显然不能为空,因此所有其他行中的值为 0。但是,如果您使用此功能,则必须为每个组选择相同的范围。 ** 此外,该函数必须位于它旁边的列中,否则您将不得不在偏移量中编辑函数,无论您要查看多少列。

Link to Excel sheet screenshot

Function FindMaxByState(rng As Range)
Dim cell As Range
Dim value As Double

value = 0

For Each cell In rng
If IsNumeric(cell.value) Then
    If cell.value > value Then
        value = cell.value
    End If   
End If

Next cell

If ActiveCell.Offset(0, -1).value = value Then
    FindMaxByState = "Max"
Else
    FindMaxByState = 0
End If

End Function

这是新公式:

=IF(D2=MIN(IF((ABS($C:$C-$H)=MIN(IF(($A:$A=A2)*($B:$B=MAX(IF(($A:$A=A2),$B:$B))),ABS($C:$C-$H))))*($A:$A=A2),$D:$D)),"Max","")

这是一个数组公式。作为数组,必须使用 Ctrl-Shift-Enter 确认。如果操作正确 excel 将在公式周围放置 {}

根据您的评论,当 ID 为文本时,以下公式将起作用。

要获取条件匹配的第一行,当有重复项时:

=IF(ROW(D2)=MIN(IF((ABS($C:$C-$H)=MIN(IF(($A:$A=A2)*($B:$B=MAX(IF(($A:$A=A2),$B:$B))),ABS($C:$C-$H))))*($A:$A=A2),ROW($D:$D))),"Max","")

当出现平局时,将 "Max" 放入两者中:

=IF((ABS(C2-$H)=MIN(IF(($A:$A=A2)*($B:$B=MAX(IF(($A:$A=A2),$B:$B))),ABS($C:$C-$H))))*($A:$A=$A:$A),"Max","")

使用我在

中使用的 COUNTIFS 方法
=IF(COUNTIFS($A:$A0,$A2,$B:$B0,">"&$B2)
+COUNTIFS($A:$A0,$A2,$B:$B0,$B2,$C:$C0,"<"&$G+DATEDIF($G,$C2,"d"))
+COUNTIFS($A:$A1,$A2,$E:$E1,"MAX"),
"","MAX")