我有一个如下所示的数组:
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 :(得分:5)
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
答案 1 :(得分: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
作为最大值。
答案 2 :(得分:1)
简单循环可以解决问题
{{1}}
答案 3 :(得分:0)
收集解决方案。
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