2017-09-24 133 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

非常感谢你;) –

相关问题