2015-11-21 113 views
0

我曾在一個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

試試這個簡單的小程序

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 
+0

正如你所提到我已經改變了原來的響應(把它在一個評論是小於全部清除) –

+0

非常感謝你「鮑勃·菲利普斯」爲你的偉大的代碼,我只需要小的修改,對於 最終結果每個客戶..在你的代碼中你是不算數的。爲1,在我的情況下,我需要最大值,所以在我的興趣結果我對結果1和0的興趣,你可以將最大值選擇任何值,如果0或1它只產生1,再次感謝 –

+0

偉大的工作,謝謝 –

1

VBA不需要這個。選擇您的所有數據和資料>大綱 - 小計:

在每個變化:customer ID
使用功能:最大
添加小計:檢查每個attributes(只)
檢查的替換當前分類彙總及以下摘要數據
確定

複製並粘貼特殊...,頂部的值。篩選以選擇ColumnA,文本篩選器,包含...,最大值,確定,選擇可見數據(不包括最後一行,如果不需要),複製並粘貼到需要的位置。刪除ColumnB。

+1

謝謝Pnuts,很好的解決方案 –