首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果行匹配,则添加数据表的列

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

Stack Overflow用户
提问于 2015-10-28 06:14:50
回答 1查看 60关注 0票数 0

我有一个包含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

EN

回答 1

Stack Overflow用户

发布于 2015-10-28 07:14:17

将以下例程放入标准代码模块中。然后在数据表处于活动状态时运行它。

代码语言:javascript
运行
复制
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行上的范围来编辑数据的位置。

注意:数据范围的右侧将写入经过平均的数据的压缩副本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33379436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档