我有一个包含5个不同列的数据表。我想要得到其中一列的平均值,如果该行的4个先前列彼此匹配。例如,如果第1-3行匹配,我希望获得第1-3行的第5列的平均值。列中的特定值将会发生变化,因此我不能使用VLOOKUP / INDEX和MATCH,因为我不一定知道我在寻找什么。理想情况下,我会喜欢一个输出表,其中列出了平均值和这些平均值对应的值。下面是一个过于简单的例子:
原始数据
新泽西州12月红色足球2纽约12月蓝色曲棍球5纽约12月蓝色曲棍球1缅因州3月蓝色足球6马里兰州2月红色足球9
会导致
新泽西州12月红色足球2纽约12月蓝色曲棍球3缅因州3月蓝色足球6马里兰州2月红色足球9
发布于 2015-10-28 07:14:17
将以下例程放入标准代码模块中。然后在数据表处于活动状态时运行它。
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行上的范围来编辑数据的位置。
注意:数据范围的右侧将写入经过平均的数据的压缩副本。
https://stackoverflow.com/questions/33379436
复制相似问题