vba - vba从数组中获取最大值

  显示原文与译文双语对照的内容
84 0

我有一个 array,看起来像这样:

Dim values(1 To 3) As String
values(1) = Sheets("risk_cat_2").Cells(4, 6).Value
values(2) = Sheets("risk_cat_2").Cells(5, 6).Value
values(3) = Sheets("risk_cat_2").Cells(6, 6).Value

现在我要做的是从字符串中的所有值中获取最大值。VBA中是否有一个简单的方法从数组中获取最大值?

时间:原作者:0个回答

56 4

VBA中是否有一个简单的方法从数组中获取最大值?

是- 如果数值为数值。你可以在VBA中使用 WorksheetFunction.Max

对于字符串- 这将不起作用。

Sub Test2()
 Dim arr(1 To 3) As Long
 arr(1) = 100
 arr(2) = 200
 arr(3) = 300
 Debug.Print WorksheetFunction.Max(arr)
End Sub
原作者:
112 2

检索最大( 我可以想到)的最简单方法是遍历数组并比较值。以下两个函数仅适用于:

Option Explicit
Public Sub InitialValues()
Dim strValues(1 To 3) As String
strValues(1) = 3
strValues(2) ="af"
strValues(3) = 6
Debug.Print GetMaxString(strValues)
Debug.Print GetMaxNumber(strValues)
End Sub
Public Function GetMaxString(ByRef strValues() As String) As String
Dim i As Long
For i = LBound(strValues) To UBound(strValues)
 If GetMaxString <strValues(i) Then GetMaxString = strValues(i)
Next i
End Function
Public Function GetMaxNumber(ByRef strValues() As String) As Double
Dim i As Long
For i = LBound(strValues) To UBound(strValues)
 If IsNumeric(strValues(i)) Then
 If CDbl(strValues(i))> GetMaxNumber Then GetMaxNumber = CDbl(strValues(i))
 End If
Next i
End Function

注意,每次将字符串( 文本) 数组传递给函数时。然而,一个函数是比较字符串( 文本) 而另一个函数比较数字。结果是完全不同的 !

函数( 比较文本) 将返回( 使用上面的示例数据) af 作为最大值,而第二个函数只考虑数字,因此返回 6 作为最大值。

原作者:
81 1

简单的循环可以

Dim Count As Integer, maxVal As Long
maxVal = Values(1)
For Count = 2 to UBound(values)
 If Values(Count)> maxVal Then
 maxVal = Values(Count)
 End If
Next Count
原作者:
135 3

收集解决方案。

Sub testColl()
 Dim tempColl As Collection
 Set tempColl = New Collection
 tempColl.Add 57
 tempColl.Add 10
 tempColl.Add 15
 tempColl.Add 100
 tempColl.Add 8
 Debug.Print largestNumber(tempColl, 2) 'prints 57
End Sub
Function largestNumber(inputColl As Collection, indexMax As Long)
 Dim element As Variant
 Dim result As Double
 result = 0
 Dim i As Long
 Dim previousMax As Double
 For i = 1 To indexMax
 For Each element In inputColl
 If i> 1 And element> result And element <previousMax Then
 result = element
 ElseIf i = 1 And element> result Then
 result = element
 End If
 Next
 previousMax = result
 result = 0
 Next
 largestNumber = previousMax
End Function
原作者:
...