最大值';excelvba中的地址
我有一列200个数字。 数字从零开始,到达最高点(X),然后减小到负值,再减小到最低点(Y),然后增大。最后它以零结尾。 0 1 2.... 10 3 2 -1 ....-10 -9 -8... 0 我使用了最大值最大值';excelvba中的地址,vba,excel,Vba,Excel,我有一列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
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
最小值相同,最小值(rng)为Y
我试图以字符串的形式获取找到的值X和Y的地址
比如说
Xadd是一种字符串去宽容;Yadd是一种字符串减容
Xadd=X值的地址;Yadd=Y值的地址
这样我可以做进一步的处理,比如直接使用
范围(Xadd:Yadd)
我能找到的大多数地方都只有使用msgbox而不是字符串查找地址的教程。你可以看到附件中的图片。
如果我画一张图,它会是这样的
所以如果我得到X和Y的范围地址,我可以把循环分成两条曲线
- Y到X
- X到Y
如何以字符串形式获取地址,或者是否有其他方法解决此问题?此函数返回包含指定范围内最大值的单元格的地址(如果出现问题,如该范围不包含值,则返回空字符串): 它可以在VBA中使用,也可以作为工作表函数使用。请注意,如果有多个值等于最大值,则函数将只查找第一个出现的值
用法示例: 工作表功能: VBA功能: …或简化:
如果需要查找后续匹配项,则可以根据需要调整公式以进行循环。它将使用用于初始搜索,然后使用循环遍历连续的匹配。(不要与模拟Tab键返回对“下一个单元格”的引用相混淆。)
更多信息:
- MSDN:
- MSDN:
- MSDN:
- MSDN:
=IF(B2=MAX(B$2:B$201),CELL("address",B2),"")
=SUBSTITUTE(TEXTJOIN(",",TRUE,C2:C201),"$","")
然后抄下来。在D2中输入:
=IF(B2=MAX(B$2:B$201),CELL("address",B2),"")
=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
所以你有一个值,你想知道该值所在的单元格引用,对吗?是的。我需要字符串形式的值……而不是范围形式的值?这两种方法都是可行的,但是你打算用字符串做什么呢?作为一个范围,这不会更好吗?在测试的范围内,只能有一个最大值或最小值吗?然后听起来像是使用查找并将返回的范围或其地址作为字符串使用。Address这可能是一个很好的起点:
TEXTJOIN
函数在Excel 2016中可用。在其他版本中,用户将获得#NAME?
错误。
Sub qwerty()
MsgBox "Maximums located at: " & Range("D2").Value
End Sub
Sub qwerty2()
With Application.WorksheetFunction
arr = .Transpose(Range("C2:C200"))
v = Replace(.Trim(Replace(Join(arr, " "), "$", "")), " ", ",")
MsgBox v
End With
End Sub