我有一張工作簿,其中有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 ** –
謝謝,當我將括號留空時,它就像一種魅力。然而,當參與者具有相同的最高分時,它並不顯示多個名字,實際上是這樣。你能幫忙嗎? –