2015-01-10 26 views
0

我全新到Excel VBA,所以我感谢所有帮助。 我在Excel VBA以下代码数据与一定的条件下在过滤片上的数据之后创建在片输出两个单独的表。如何总结在VBA两个空单元格之间的列中的所有值?

Dim i, LastRow 
    LastRow = Sheets("data").Range("B" & Rows.Count).End(xlUp).Row 
    Sheets("output").Range("A2:L500").ClearContents 

    Sheets("output").Range("A" & Rows.Count).End(xlUp).Offset(1) = "first table" 

    For i = 2 To LastRow 
     If Sheets("data").Cells(i, "G").Value > 0 And Sheets("data").Cells(i, "G").Value <= 2 Then 
     Sheets("data").Cells(i, "G").EntireRow.Copy Destination:=Sheets("output").Range("A" & Rows.Count).End(xlUp).Offset(1) 
End If 
Next i 

Sheets("output").Range("A" & Rows.Count).End(xlUp).Offset(3) = "second table" 

For i = 2 To LastRow 
If Sheets("data").Cells(i, "G").Value > 2 And Sheets("data").Cells(i, "G").Value <= 3 Then 
    Sheets("data").Cells(i, "G").EntireRow.Copy Destination:=Sheets("output").Range("A" & Rows.Count).End(xlUp).Offset(1) 
End If 
Next i 

End Sub 

我希望它做的是给一些特定的列(比如,列C)的所有值的总和为每个表(分别为表1和分别为表2)。

回答

2

这个解决方案应该工作你是否有你的表之间有一个空格,五十位:

Sub SumTablesByColumn(sCol As String) 
Dim lLastRow As Long 
Dim x As Long 
Dim counter As Long 
Dim lStartRow As Long 

lStartRow = 1 
counter = 1 
lLastRow = ActiveSheet.Range(sCol & 500000).End(xlUp).Row 

For x = 1 To lLastRow + 1 
    If Range(sCol & x).Value <> "" And Range(sCol & x + 1).Value <> "" Then 
     counter = counter + 1 
    ElseIf Range(sCol & x).Value <> "" And Range(sCol & x + 1).Value = "" Then 
     Range(sCol & counter + 1).Formula = "=SUM(" & sCol & lStartRow & ":" & sCol & counter & ")" 
     x = x + 1 
     If Range(sCol & x + 1).Value <> "" Then 
      lStartRow = x + 1 
      counter = x + 1 
     End If 
    ElseIf Range(sCol & x).Value = "" And Range(sCol & x + 1).Value <> "" Then 
     lStartRow = x + 1 
     counter = x + 1 
    End If 
Next 
End Sub 
相关问题