2017-12-05 2 views
0

특정 동적 범위를 사용하여 열 A의 값 합계를 계산하는 Excel 매크로를 만들려고합니다.Excel VBA 동적 범위 합계

기본 엑셀 예 스크린 아래 포함 :

Excel snapshot

최종 목표에 도달 할 때 "0"까지 열 B의 셀을 통해 루프이다. "0"에 도달하면 같은 행의 A 열에서 B 열의 새로운 "0"에 도달 할 때까지 A 열의 모든 값의 합이 계산됩니다. 따라서이 기본 예제에서 A1은 = sum (A2 : A7)을 포함하고 A8은 A9에서 A14까지의 값의 합계를 포함해야합니다.

나의 진도는 지금까지 아래에 포함되어 있었고, 여전히 모든 VBA에 꽤 새로워졌습니다.

Sub sumtill0() 
' 
' sumtill0 Macro 
' 

' 
Cells(ActiveCell.Row, 1).Select 
If Sheets("Blad1").Cells(2, 1).Value = nil And Sheets("Blad1").Cells(2, 1).Value <> "0" Then 
    Sheets("Blad1").Activate 
    Cells(2, 1).Range("A1").Select 
     Else 
    Dim artTekst As String 
    If Sheets("Blad1").Cells(1, 2).Value = "0" Then 
     Sheets("Blad1").Cells(1, 1).Fomula = "=SUM()" 
    Else 
     If Sheets("Blad1").Cells(1, 2).End(xlDown).Value = "0" Then 
      Sheets("Blad1").Cells(1, 1).End(xlDown).Offset(1, 0).Value = "0" 
      Sheets("Blad1").Cells(1, 1).End(xlDown).Fomula = "=SUM(???)" 
      ActiveCell.Value = Sheets("Blad1").Cells(1, 2).End(xlDown).Offset(0, -2).Value 
    End If 

End If 

End If 

End Sub 

감사합니다 :)

+0

정확히 무엇이 문제입니까? 코드가 작동하지 않습니까? B가 0 일 때 A가 단지 비어있는 경우가 있습니까? – SJR

+0

합계의 범위를 정의하는 쓰기 코드를 찾지 못해 코드가 준비되지 않았습니다. B가 0이 아니더라도 A는 비워 둘 수 있습니다. – Tefalpan

+0

VBA 여야합니까? 수식이이를 수행 할 것이므로 –

답변

1

이 당신이 원하는 것을 생각하십시오. Find 메서드를 사용하여 연속적인 0을 찾고 각 쌍 사이의 범위를 합산합니다. 다시 시작 값으로 돌아 가면 맨 아래 값의 합계가됩니다 (B의 첫 번째 값이 0이 아닌 경우 어떤 일이 발생할지 확실하지 않음).

Sub x() 

Dim rFind As Range, s As String, r1 As Range 

With Range("B1", Range("B" & Rows.Count).End(xlUp)) 
    Set rFind = .Find(What:=0, After:=.Cells(.Cells.Count), LookIn:=xlFormulas, _ 
         Lookat:=xlWhole, SearchDirection:=xlNext, searchFormat:=False) 
    If Not rFind Is Nothing Then 
     s = rFind.Address 
     Do 
      Set r1 = rFind 
      Set rFind = .FindNext(rFind) 
      If rFind.Address = s Then 
       Set rFind = .Cells(.Cells.Count) 
       r1.Offset(, -1).Value = Application.Sum(Range(r1.Offset(1, -1), rFind.Offset(, -1))) 
       Exit Sub 
      End If 
      r1.Offset(, -1).Value = Application.Sum(Range(r1.Offset(1, -1), rFind.Offset(-1, -1))) 
     Loop While rFind.Address <> s 
    End If 
End With 

End Sub 
+1

고마워요! 그것은 매력처럼 작동합니다. 단지 작은 것이므로 끝에 0이있는 경우에만 합계를 계산하므로 마지막 0에 해당하는 합계가 '공백 합계'가됩니다. 이 문제는 파일 끝에 0을 추가하는 것만으로 해결됩니다. 마지막 합계를 코드에 포함 할 수 있습니까? 첫 번째 값은 항상 0이므로 문제가되지 않습니다. – Tefalpan

+0

마지막 값이 0이면 합계는 어떻게됩니까? – SJR

+0

끝까지 도달 할 때까지의 모든 값의 합 – Tefalpan