因此,我有一个名称和值的列表,链接在这里:
理想情况下,我想在电子表格中找到最高值,然后显示总体值最高的人的姓名。
到目前为止,比如说,在‘星期二’行中,我已经能够选择最高值,并使用此公式获得具有最高值的名字‘Frank’...
=INDEX($B$1:$M$1,MATCH(MAX(B4:M4),B4:M4,0))
...然后根据其他每个“日子”进行相应的更改。
我想要做的是选出所有“天数”中绝对值最高的人的名字。
在所附的例子中,它将是“Joseph”,其值为“589”。
我知道我可以使用 MAX(B2:M8) 来获取单元格中显示的最高值“589”,这很完美,但现在我想显示获得最高值的人的实际姓名,在本例中为“Joseph”。
我该如何做呢?
任何帮助都将不胜感激。谢谢。
答案1
1]B1:M1
安置人的名字和B2:M8
安置你的价值
2] 获得当天最高价值的人的姓名
在 中O2
输入公式:
=INDEX(B1:M1,SUMPRODUCT((B2:M8=MAX(B2:M8))*COLUMN(A1:L1)))
编辑#.1
如果最大值有重复,则公式更改为 >>
在 中O2
输入数组公式(Shift+Ctrl+Enter)
=TEXTJOIN(", ",1,INDEX(B1:M1,N(IF(1,AGGREGATE(15,6,COLUMN(A1:L1)/(B2:M8=MAX(B2:M8)),ROW(INDIRECT("1:"&COUNTIF(B2:M8,MAX(B2:M8)))))))))
答案2
如果您想尝试用户定义的函数,这个可以完成这项工作:
Function GetHighEarner(Target As Range) As String
Dim MyStr As String
Dim MyMax As Long, i As Long
Dim MyArr As Variant
MyArr = Target
MyMax = Application.Max(MyArr)
For i = LBound(MyArr, 2) To UBound(MyArr, 2)
If Application.Max(Application.Index(MyArr, , i)) = MyMax Then
If Len(MyStr) < 1 Then
MyStr = MyArr(1, i)
Else
MyStr = MyStr & ", " & MyArr(1, i)
End If
End If
Next i
GetHighEarner = MyStr
End Function
只需按 ALT F11 进入开发人员菜单,插入模块并将函数粘贴到模块中,然后在工作表中使用:=GetHighEarner(B1:M8)(从您的示例来看,任何范围都可以)在工作表中正常使用。该函数假定您已在范围内包含标题行(名称)。将返回与范围内的最高值匹配的任何名称。
答案3
考虑不要在一个公式中完成所有操作。在每一列中为该列创建 MAX(),例如在第 1 行。然后,您可以为第 1 行创建一个 Max,并使用查找来查找第 1 行中哪一列具有该值。
如果有多列具有相同的最大值,则当然只会显示第一列,因此您需要研究一些解决平局的方法。