从数组中识别缺失值

时间:2015-04-14 22:08:32

标签: arrays excel vba loops excel-vba

我正在努力在VBA中创建一个函数,用于计算nxn维矩阵的每列中缺失值的数量。

每列应仅包含数字1到n一次。 但是,如果不是这种情况,我希望函数说明缺少多少个值。例如,在4x4矩阵(1,2,1,3)的列中,有一个缺失值为4,函数应返回值1,为1缺失值。

我对VBA很新,绝不是高手,但这是我到目前为止所做的......

Function calcCost(sol() As Integer, n As Integer) As Integer

Dim ArrayOfTruth(1 To n) As Boolean 


    For Row = 1 To n
        For i = 1 To n
            If ProbMatrix(Column, Row) = i Then
                ArrayOfTruth(i) = True

    cost = 0
    For i = 1 To n
        If ArrayOfTruth(i) = True Then
            cost = cost + 1

1 个答案:

答案 0 :(得分:0)

假设方形单元格的要求取代了'矩阵'值的描述,我不确定为什么需要一个数组。

Function calcCost(rTopLeft As Range, n As Long)
    Dim c As Long, r As Long

    For c = 1 To n
        If Not CBool(Application.CountIf(rTopLeft.Resize(n, n), c)) Then _
            r = r + 1
    Next c
    calcCost = r

End Function

语法:

= calcCost(<所需范围的左上角>,<向右和向下的单元格数>

示例:

=calcCost(E9, 18)

上述实现也可以写成,

=18-SUMPRODUCT(--SIGN(COUNTIF(OFFSET(E9,0,0,18,18), ROW(1:18))))