Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
最大值';excelvba中的地址_Vba_Excel - Fatal编程技术网

最大值';excelvba中的地址

最大值';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

我有一列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
最小值相同,最小值(rng)为Y

我试图以字符串的形式获取找到的值X和Y的地址

比如说

Xadd是一种字符串去宽容;Yadd是一种字符串减容

Xadd=X值的地址;Yadd=Y值的地址

这样我可以做进一步的处理,比如直接使用

范围(Xadd:Yadd)

我能找到的大多数地方都只有使用msgbox而不是字符串查找地址的教程。你可以看到附件中的图片。 如果我画一张图,它会是这样的

所以如果我得到X和Y的范围地址,我可以把循环分成两条曲线

  • Y到X
  • X到Y
这就是为什么我需要将X和Y的地址作为一个字符串来获取,这样我就可以将它们输入到循环中并进行进一步的处理


如何以字符串形式获取地址,或者是否有其他方法解决此问题?

此函数返回包含指定范围内最大值的单元格的地址(如果出现问题,如该范围不包含值,则返回空字符串):

它可以在VBA中使用,也可以作为工作表函数使用。请注意,如果有多个值等于最大值,则函数将只查找第一个出现的值


用法示例: 工作表功能: VBA功能: …或简化:


如果需要查找后续匹配项,则可以根据需要调整公式以进行循环。它将使用用于初始搜索,然后使用循环遍历连续的匹配。(不要与模拟Tab键返回对“下一个单元格”的引用相混淆。)


更多信息:
  • MSDN:

  • MSDN:

  • MSDN:

  • MSDN:


如果您觉得自己是VBA的初学者,可以大大缩短代码。在C2中输入:

=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