2017-07-24 20 views
0

我有一張工作簿,其中有8張工作表,其中包含同一單元格中的分數(I28)。表單以參與者的名字命名幷包含空格。我想知道哪個是8分的最高分,更難的是誰擁有那個分數。匹配多個工作表數組中的值

使用MAX或LARGE函數(= MAX('Sheet1:Sheet8'$ I $ 28)可以很容易地找到最高分,但是我很難將此高分與獲得該分數的參與者相匹配。在表單中沒有任何地方,只有表單名稱有參考

如何讓Excel將最高分匹配到合適的參與者而不首先列出分數?是否可以列出更多名稱?同等分數

回答

0

試試這個小用戶定義的函數:

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)是非常容易安裝和使用:

  1. ALT-F11帶來了VBE窗口
  2. ALT-I ALT- M打開一個新的模塊
  3. 粘貼的東西在,並關閉VBE窗口

如果保存工作簿,UDF將隨之保存。 如果您正在使用一個版本的Excel更高然後2003,你必須保存 該文件作爲.XLSM而非的.xlsx

要刪除UDF:

  1. 彈出窗口VBE如上
  2. 清晰的代碼進行
  3. 關閉VBE窗口

從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 
+0

感謝您的答覆。雖然我對VBA不是完全綠色,但是您能否指導我在何處以及如何實現此代碼?順便說一下,我希望名稱在單元格中返回。 –

+0

@ H.Vink參閱我的**編輯#1 ** –

+0

謝謝,當我將括號留空時,它就像一種魅力。然而,當參與者具有相同的最高分時,它並不顯示多個名字,實際上是這樣。你能幫忙嗎? –