如果行匹配,则添加数据表列

时间:2015-10-27 22:14:50

标签: excel vba

我有一个包含5个不同列的数据表。如果前面的4列与该行相互匹配,我想得到其中一列的平均值。例如,如果行1-3匹配,我想获得第1-3行的第5列的平均值。列中的具体值将会发生变化,因此我无法使用VLOOKUP / INDEX和MATCH,因为我不一定知道我在寻找什么。理想情况下,我想要一个输出表,列出平均值和这些平均值对应的值。下面是一个简单的例子 -

原始数据

新泽西12月红色足球2 纽约12月蓝曲棍球5 纽约12月蓝曲棍球1 Maine Mar Blue Soccer 6 马里兰州2月红足球9

会导致

新泽西12月红色足球2 纽约12月蓝曲棍球3 Maine Mar Blue Soccer 6 马里兰州2月红足球9

1 个答案:

答案 0 :(得分:0)

将以下例程放在标准代码模块中。然后在数据表激活的情况下运行它。

Sub Condense()
    Dim c&, i&, j&, k&, m&, cols&, v, w, bMatch As Boolean, r As Range
    Set r = [a2:e6]
    v = r.Resize(r.Rows.Count + 1)
    cols = UBound(v, 2)
    ReDim w(1 To UBound(v), 1 To cols)
    For i = 2 To UBound(v)
        k = i - 1
        bMatch = True
        For j = 1 To cols - 1
            If v(i, j) <> v(k, j) Then
                bMatch = False: Exit For
            End If
        Next
        If bMatch Then
            m = k
        Else
            c = c + 1
            For j = 1 To cols
                w(c, j) = v(k, j)
            Next
            If m Then
                w(c, cols) = Application.Average(Range(r(m, cols), r(k, cols)))
            End If
            m = 0
        End If
    Next
    r.Resize(UBound(w), cols).Offset(, cols + 1) = w
End Sub

注意:您可以通过调整第2行的范围来编辑数据的位置。

注意:完成平均的数据的精简副本将写入数据范围的右侧。