我有一张工作簿,其中有8张工作表,其中包含同一单元格中的分数(I28)。表单以参与者的名字命名并包含空格。我想知道哪个是8分的最高分,更难的是谁拥有那个分数。匹配多个工作表数组中的值
使用MAX或LARGE函数(= MAX('Sheet1:Sheet8'$ I $ 28)可以很容易地找到最高分,但是我很难将此高分与获得该分数的参与者相匹配。在表单中没有任何地方,只有表单名称有参考
如何让Excel将最高分匹配到合适的参与者而不首先列出分数?是否可以列出更多名称?同等分数
我有一张工作簿,其中有8张工作表,其中包含同一单元格中的分数(I28)。表单以参与者的名字命名并包含空格。我想知道哪个是8分的最高分,更难的是谁拥有那个分数。匹配多个工作表数组中的值
使用MAX或LARGE函数(= MAX('Sheet1:Sheet8'$ I $ 28)可以很容易地找到最高分,但是我很难将此高分与获得该分数的参与者相匹配。在表单中没有任何地方,只有表单名称有参考
如何让Excel将最高分匹配到合适的参与者而不首先列出分数?是否可以列出更多名称?同等分数
试试这个小用户定义的函数:
Public Function PersonOfInterest()
Dim v As Variant, nam As String
Application.Volatile
nam = Sheet1.Name
v = Sheet1.Range("J28").Value
For i = 2 To 8
v2 = Sheets(i).Range("J28").Value
If v2 > v Then
v = v2
nam = Sheets(i).Name
End If
Next i
PersonOfInterest = nam
End Function
编辑#1:
用户定义函数(UDF)是非常容易安装和使用:
如果保存工作簿,UDF将随之保存。 如果您正在使用一个版本的Excel更高然后2003,你必须保存 该文件作为.XLSM而非的.xlsx
要删除UDF:
从Excel使用UDF:
= myfunction的(A1)
要了解更多关于一般的宏,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
以及有关UDF的细节,请参见:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其工作!
编辑#2:
这个版本将返回多个名称:
Public Function PersonsOfInterest()
Dim v As Variant, nam As String
Dim i As Long, v2 As Variant
Application.Volatile
nam = Sheet1.Name
v = Sheet1.Range("J28").Value
For i = 2 To 8
v2 = Sheets(i).Range("J28").Value
If v2 > v Then
v = v2
End If
Next i
PersonsOfInterest = ""
For i = 1 To 8
If Sheets(i).Range("J28").Value = v Then
If PersonsOfInterest = "" Then
PersonsOfInterest = Sheets(i).Name
Else
PersonsOfInterest = PersonsOfInterest & ", " & Sheets(i).Name
End If
End If
Next i
End Function
感谢您的答复。虽然我对VBA不是完全绿色,但是您能否指导我在何处以及如何实现此代码?顺便说一下,我希望名称在单元格中返回。 –
@ H.Vink参阅我的**编辑#1 ** –
谢谢,当我将括号留空时,它就像一种魅力。然而,当参与者具有相同的最高分时,它并不显示多个名字,实际上是这样。你能帮忙吗? –