在数组中添加行值:VBA

时间:2012-09-29 15:45:47

标签: vba excel-vba excel

我正在VBA中构建遗传算法,我的适应度函数取决于数组行有多少1。该数组是1和0的组合。数组可以是任何大小(2D),我需要在行中添加1的数量,并将其与其余值进行比较。我正在考虑找到1的最大值并将其与数组中的最小值1进行比较并从那里向前移动,但我不确定这是否是最好的方法。

如果你们能给我一些关于如何做到这一点的提示,那就太棒了!或者,如果我在VBA中缺少某些数组添加功能。

2 个答案:

答案 0 :(得分:1)

另一种方法是使用Excel的SUM()函数来完成工作。对数组求和可以得到与计算数组相同的答案,您可以使用Application.WorksheetFunction对象来访问SUM()

x = Application.WorksheetFunction.Sum(aArray)

答案 1 :(得分:0)

你只需要计算那些;如果每个单独的元素不是1,它就是零,所以你可以从数组的大小中减去1的数量,得到零个数。

Function CountTheOnes(aArray As Variant) As Long
    Dim x As Long
    Dim OnesCount As Long
    For x = LBound(aArray) To UBound(aArray)
        If aArray(x) = 1 Then
            OnesCount = OnesCount + 1
        End If
    Next
    CountTheOnes = OnesCount
End Function

' and to test it:

Sub TestIt()
    Dim aArray(1 To 10) As Byte
    Dim x As Long

    ' stuff the array with zeros
    For x = LBound(aArray) To UBound(aArray)
        aArray(x) = 0
    Next

    ' then add a couple of random 1s
    aArray(3) = 1
    aArray(7) = 1
    aArray(9) = 1


    x = CountTheOnes(aArray)

    Debug.Print "Ones:" & vbTab & x
    Debug.Print "Zeros:" & vbTab & UBound(aArray) - x

End Sub