excel vba中最大的值地址

问题描述 投票:1回答:2

我有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是一个字符串声明; Yaad是一个字符串声明

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

所以我可以像直接使用一样进行进一步的处理

范围(Xadd:Yadd)

大多数地方我只能通过使用msgbox而不是字符串找到教程来查找地址。你可以看到附图。如果我绘制图形,它将是这样的。

enter image description here

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

  • Y到X.
  • X到Y.

这就是为什么我需要将X和Y的地址作为字符串获取,以便我可以将它们提供给循环并进行进一步处理。

如何将地址作为字符串或有其他方法来解决问题?

excel vba excel-vba
2个回答
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中使用或作为工作表函数使用。请注意,如果有多个值等于最大值,则该函数将仅查找第一个出现的值。


Example usage:

工作表功能:

=MAXMATCH(A1:B50)

VBA功能:

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混淆,返回对“下一个单元格”的引用。)


更多信息:


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

enter image description here

编辑#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
© www.soinside.com 2019 - 2024. All rights reserved.