Excel – 只select一个最大值

我有一个如下所示的数据集。 E栏是我的公式栏。 我想列E读取“最大”的行,其中ID包含该状态的最大概率。 如果同一国家的两个身份证件具有相同的概率,如马里兰州,我希望“最大”显示最近date的身份证件。 如果两个ID在概率和date上都匹配,那么我希望“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 

这是新的公式:

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

这是一个数组公式。 作为一个数组,它必须通过Ctrl-Shift-Enter确认。 如果做得好,excel会把{}放在公式的周围。

在这里输入图像说明

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

要获得标准匹配的第一行,当有重复时:

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

在有平局的情况下要把“Max”

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

在这里输入图像说明

使用我以前答案中使用的COUNTIFS方法,

 =IF(COUNTIFS($A$2:$A$100,$A2,$B$2:$B$100,">"&$B2) +COUNTIFS($A$2:$A$100,$A2,$B$2:$B$100,$B2,$C$2:$C$100,"<"&$G$2+DATEDIF($G$2,$C2,"d")) +COUNTIFS($A$1:$A1,$A2,$E$1:$E1,"MAX"), "","MAX") 

在这里输入图像说明

这可能有帮助,但有点麻烦。 函数的返回值显然不能为空,所以在其他所有行中都会有0。 但是,如果你使用这个function,你的范围必须select相同的每个组。 ** 此外,该function必须在其旁边的列中,否则您将不得不编辑偏移的function,无论你想看多less列。

链接到Excel表格截图

 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