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")
我有一个如下所示的数据集。 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","")
使用我在
=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")