分组数据表

时间:2015-11-21 09:07:17

标签: excel excel-vba excel-formula vba

我在Excel文件中有以下表格:

customer ID sell    attribute1  attribute2  attribute3  ……  attribute N
Customer1   sell1   1               0            1              1   
Customer1   sell2   0               0            0              0   
Customer1   sell3   1               0            1              1   
Customer2   sell4   0               0            0              1   
Customer2   sell5   1               0            1              0   
Customer3   sell6   1               0            0              0   
……  ……                  

我需要一个Excel VBA函数来删除冗余客户行,并为每个客户只生成一行代表该客户的所有列值...(每列的最大值仅生成该列中的最大值),列销售它不考虑最终结果。

结果如下:

customer ID     attribute1  attribute2  attribute3  ……  attribute N
Customer1       1               0            1              1   
Customer2       1               0            1              1   
Customer3       1               0            0              0   

等...

2 个答案:

答案 0 :(得分:1)

此处不需要VBA。选择所有数据和DATA>大纲 - 小计:

每次更改时:customer ID
使用功能:最大
添加小计:检查每个attributes(仅) 检查替换当前小计和下面的摘要数据
好的

复制并粘贴特殊...,值超过顶部。过滤以选择ColumnA,文本过滤器,包含...,最大,确定,选择可见数据(如果不需要,则排除最后一行),复制并粘贴到需要的位置。删除ColumnB。

答案 1 :(得分:0)

尝试这个简单的小程序

Sub MergeData()
Dim lastrow As Long
Dim lastcol As Long
Dim i As Long, ii As Long

    Application.ScreenUpdating = False

    With ActiveSheet

        lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
        lastcol = .Cells(1, .Columns.Count).End(xlToLeft).Column

        For i = lastrow To 2 Step -1

            If .Cells(i, "A").Value = .Cells(i - 1, "A").Value Then

                For ii = 3 To lastcol

                    .Cells(i - 1, ii).Value = -(.Cells(i - 1, ii).Value > 0 OR .Cells(i, ii).Value > 0)
                Next ii

                .Rows(i).Delete
            End If
        Next i

        .Columns(2).Delete
    End With

    Application.ScreenUpdating = True
End Sub