我在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
等...
答案 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