2017-07-24 19 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

谢谢,当我将括号留空时,它就像一种魅力。然而,当参与者具有相同的最高分时,它并不显示多个名字,实际上是这样。你能帮忙吗? –