2017-09-24 129 views
-1

enter image description here [在這裏輸入的形象描述] [2]你好,EXCEL VBA尋找價值,然後總結,然後刪除其他行

我有一個問題,希望有人能提供幫助。我有一個Excel工作表,我需要檢查是否從最後一行開始,如果第4列中的最後一行存在相同的值,但條件是,只有第1列和第2列相同而不是第3列單詞「SK」或「SV」,然後我需要對第7列和第6列的值進行求和,並且只保留一行,另一個作爲此計算基礎的值必須刪除。

附加你會發現截圖。首先,Excel文件在處理之前的樣子和下一個截圖之後的樣子應該如何。

enter image description here

+0

你的樣品沒有不包括在最後一行4列東西,所以我加了9105000,以獲得您的第二截屏的結果。試試這個代碼,看看它是不是你想要的...... – Shaves

回答

0

下面是代碼:

Sub combine_data() 

    Dim vLastRow As Integer 
    Dim Col_A_Str As String 
    Dim Col_B_Str As String 
    Dim r As Integer 
    Dim vDatarow As Integer 
    Dim vCodeStr3 As String 
    Dim vCodeStr6 As String 
    Dim vTotal As Double 
    Dim Col_D_Str As String 

    vLastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row 
    Col_A_Str = "" 
    Col_B_Str = "" 
    r = 1 
    vDatarow = 0 
    vCodeStr3 = "" 
    vCodeStr6 = "" 
    vTotal = 0 
    Col_D_Str = "" 

    Col_A_Str = Trim(Cells(vLastRow, 1)) 
    Col_B_Str = Trim(Cells(vLastRow, 2)) 
    Col_D_Str = Trim(Cells(vLastRow, 4)) 

    Do Until r = vLastRow 

     DoEvents 

     If Trim(Cells(r, 4)) = Col_D_Str Then 

      If Trim(Cells(r, 1)) = Col_A_Str Then 

       If Trim(Cells(r, 2)) = Col_B_Str Then 

        If UCase(Trim(Cells(r, 3))) <> "SV" And UCase(Trim(Cells(r, 3))) <> "SK" Then 

         If vDatarow = 0 Then 

          If vDatarow = 0 Then vDatarow = r 

          vCodeStr3 = Trim(Cells(r, 3)) 
          vCodeStr6 = Trim(Cells(r, 6)) 
          vTotal = Cells(r, 7) 

          r = r + 1 

         Else 

          vCodeStr3 = vCodeStr3 & ", " & Trim(Cells(r, 3)) 
          vCodeStr6 = vCodeStr6 & ", " & Trim(Cells(r, 6)) 
          vTotal = vTotal + Cells(r, 7) 

          Cells(r, 1).EntireRow.Delete 
          vLastRow = vLastRow - 1 

         End If 

        Else 

         r = r + 1 

        End If 

       Else 

        r = r + 1 

       End If 

      Else 

       r = r + 1 

      End If 

     Else 

      r = r + 1 

     End If 

    Loop 

    Cells(vDatarow, 3).ClearContents 
    Cells(vDatarow, 3) = vCodeStr3 

    Cells(vDatarow, 6).ClearContents 
    Cells(vDatarow, 6) = vCodeStr6 

    Cells(vDatarow, 7).ClearContents 
    Cells(vDatarow, 7) = vTotal 

End Sub 
+0

非常感謝你;) –

相關問題