我正在用 excel 编写宏,需要获取与某个范围内的最大值关联的字符串或文本。
我的范围看起来像这样:
一个 |乙
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)
最佳答案
您可以使用 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
关于VBA - 获取与范围内最大值关联的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40266840/