我有1列,有200个数字。 数字从零开始,到达最高点(X),然后减少到负值到最低点(Y)然后增加。最后它以零结束。 0 1 2 .... 10 3 2 -1 ....- 10 -9 -8 ... 0
我使用
获得了最大值Sub Largest()
Dim rng As Range
Dim X As Double
Set rng = Sheet2.Range("B2:B201")
X = Application.WorksheetFunction.Max(rng)
Worksheets(1).Range("D3").Value = X
End Sub
和最小值相同,Min(rng)为Y
我试图将找到的值X和Y的地址作为字符串。
例如
Xadd是一个字符串缩写; Yadd是一个字符串删除
Xadd = X值的地址; Yadd = Y值的地址
这样我就可以直接使用
进行进一步处理范围(XADD:YADD)
大多数地方我只能通过使用msgbox而不是字符串找到教程来查找地址。你可以看到附图。 如果我绘制图形,它将是这样的。
所以如果我得到X和Y的范围地址,我可以将循环分成两条曲线
这就是为什么我需要将X和Y的地址作为字符串获取,以便我可以将它们输入循环并进行进一步处理。
如何将地址作为字符串获取,还是有其他方法可以解决问题?
答案 0 :(得分:2)
此函数返回包含指定范围内最大值的单元格的地址(如果存在问题,则返回空字符串,例如,如果范围不包含值):
Function maxMatch(rge As Range) As String
Dim fnd As Range, mx As Double
'get maximum value in range
mx = Application.WorksheetFunction.Max(rge)
'get range object containing location of [mx]
Set fnd = rge.Find(mx, , xlValues)
'return address of first matched cell
If Not fnd Is Nothing Then maxMatch = fnd.Address
End Function
它可以在VBA中使用或作为工作表函数使用。请注意,如果有多个值等于最大值,则该函数将仅查找第一个值。
=MAXMATCH(A1:B50)
Dim mySearchRange as Range
Set mySearchRange = Sheets("Sheet1").Range("A1:B50")
MsgBox MaxMatch(mySearchRange)
...或简化:
MsgBox MaxMatch(Sheets("Sheet1").Range("A1:B50"))
如果需要找到 后续匹配 ,则可以根据需要调整公式。它将使用Range.Find
Method进行初始搜索,然后使用Range.FindNext
Method循环连续匹配。 (不要与模仿 Tab 键的Range.Next
Property混淆,返回对" next cell"的引用。)
答案 1 :(得分:1)
如果您认为自己是 VBA 的初学者,则可以大大缩短代码。在 C2 中输入:
=IF(B2=MAX(B$2:B$201),CELL("address",B2),"")
并复制下来。在 D2 中输入:
=SUBSTITUTE(TEXTJOIN(",",TRUE,C2:C201),"$","")
然后 VBA 可能是:
Sub qwerty()
MsgBox "Maximums located at: " & Range("D2").Value
End Sub
修改#1:强>
上述方法假设您的Excel版本支持TEXTJOIN()
。
如果没有,则省略 D2 等式并改为使用此宏:
Sub qwerty2()
With Application.WorksheetFunction
arr = .Transpose(Range("C2:C200"))
v = Replace(.Trim(Replace(Join(arr, " "), "$", "")), " ", ",")
MsgBox v
End With
End Sub