我正在使用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)
答案 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