从数组

时间:2016-06-13 12:08:06

标签: vba excel-vba excel

我有一个如下所示的数组:

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中有一种简单的方法可以从数组中获取最大值吗?

4 个答案:

答案 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