我有一个包含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
答案 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行的范围来编辑数据的位置。
注意:完成平均的数据的精简副本将写入数据范围的右侧。