2016-10-03 58 views
0

說我有一個4列的表:Id(col23),Group(col 5),Option(col24)& value(col 12)。這是一個簡化的示例,col數字是我實際電子表格中的數字。我想要做的是在id列中有多個具有相同ID的行時刪除重複行。此位正在使用以下代碼:在vba中重複

Sub data() 

Dim LastRow As Long 
Dim i As Long 

LastRow = Cells(Rows.Count, "C").End(xlUp).Row 

For i = LastRow To 2 Step -1 

    If Cells(i, 12).Value < Application.Evaluate("MAX(IF(" & Range(Cells(1, 23), Cells(LastRow, 23)).Address _ 
      & "=" & Cells(i, 23).Address & "," & Range(Cells(1, 12), Cells(LastRow, 12)).Address & "))") Then 

     Rows(i).Delete 

    End If 

Next i 

End Sub 

但是我注意到對於某些記錄,id是相同的,而且值也是相同的。這意味着我剩下幾個重複。爲了擺脫這些,我還想運行測試來比較選項欄中的內容。該列中的每個單元格將具有以下選項之一:OptionA,OptionB,OptionC,按尊重排列。應該保留最重要的一個,並刪除其他人。

我還試圖做的是計數並記錄每個組中有多少重複項已被刪除。假設有3個組:GroupA,GroupB & GroupC,我想要一個數組,每次刪除一個副本時,代碼都應該檢查它屬於哪個組,並將一個數組添加到該數組的元素中。 你知道我可以如何修改我的代碼來實現嗎?

回答

0

你可以聲明,並在你的代碼的頂部initialse陣列(以下稱暗淡我作爲龍)是這樣的:你刪除的行

Dim yourArray(3) As Long 

    yourArray(1) = 0 'GroupA 
    yourArray(2) = 0 'GroupB 
    yourArray(3) = 0 'GroupC 

那麼你的IF語句中之前添加這樣的事情:

if(cells(i, 5).value = "GroupA") then yourArray(1) = yourArray(1) + 1 
if(cells(i, 5).value = "GroupB") then yourArray(2) = yourArray(2) + 1 
if(cells(i, 5).value = "GroupC") then yourArray(3) = yourArray(3) + 1 

有簡潔的方式來做到這一點,但是這將完成這項工作