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中是否有一个简单的方法从数组中获取最大值?

时间: 原作者:

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



原作者:
...