VBA - 获取与范围中的最大值关联的字符串

时间:2016-10-26 15:53:12

标签: vba excel-vba worksheet-function excel

我正在使用Excel编写宏,需要获取与范围内最大值相关联的字符串或文本。

我的范围看起来像这样:

A | B
CR1 | 2.33
CR2 | 5.1
CR3 | 10.0
CR4 | 3.8

我能够在B列中找到MAX值,但现在我需要A列中的关联字符串。所以在这种情况下,给定B3(10.0)是最大值,我想拉出'CR3'。

所以我的拉取最大值的代码是:

 Set myRange = Application.InputBox( _
 prompt:="Please select the Range.", Title:="Graph Range", Type:=8)
 highestNum = Application.WorksheetFunction.Max(myRange)

如何在A列中获取关联字符串? 我已经尝试过使用.Address,但这并没有把我带到任何地方。

提前致谢!



!!!!!!!编辑/更新 - 解决:!!!!!!!

正如另一个贡献者建议的那样,我需要使用inded + Match。请参阅下面的解决方案。

Set myRange = Application.InputBox( _
prompt:="Please select the Primary KPI 'Lift' Data to Graph.", Title:="Graph Range", Type:=8)

Set rngColumn2 = myRange.Areas(2)

highestNum = Application.WorksheetFunction.Max(myRange)

test = Application.WorksheetFunction.Index(myRange, Application.WorksheetFunction.Match(highestNum, rngColumn2, 1), 1)

3 个答案:

答案 0 :(得分:2)

您可以使用Range.Find()返回找到最大值的单元格。

然后使用offset将单元格中的值直接返回到左侧:

 Dim mtch As Range
 Set myrange = Application.InputBox( _
 prompt:="Please select the Range.", Title:="Graph Range", Type:=8)
 highestNum = Application.WorksheetFunction.Max(myrange)
 Set mtch = myrange.Find(highestNum)
 Debug.Print mtch.Offset(, -1).Value

修改

您似乎遇到了舍入/浮点小数问题。为了帮助解决这个问题,我们需要更改为For Each循环并将每个值加载到另一个double中,以便舍入相同:

Dim mtch As Range
Dim highestNum As Double
Dim t As Double
Dim myrange As Range
 Set myrange = Application.InputBox( _
 prompt:="Please select the Range.", Title:="Graph Range", Type:=8)
 highestNum = Application.WorksheetFunction.Max(myrange)
 t = Range("B3").Value
 r = t = highestNum
 For Each mtch In myrange
    t = mtch.Value
    If t = highestNum Then
        Debug.Print mtch.Offset(, -1).Value
        Exit For
    End If
Next mtch

答案 1 :(得分:1)

您只需要一个index(Match,Match)功能。 它将查看B中的最高数字并返回A.

答案 2 :(得分:0)

只是为了解决Scott的解决方案:

With Application.InputBox(prompt:="Please select the Range.", Title:="Graph Range", Type:=8)
    Debug.Print Cells.Find(Application.WorksheetFunction.Max(.Cells)).Offset(, -1).Value
End With