2017-12-05 10 views
0

特定のダイナミックレンジを使用して、カラムAの値の合計を計算するエクセルマクロを作成しようとしています。Excel VBAとダイナミックレンジの合計

基本Excelの例のスクリーンショットは、以下を含む:

Excel snapshot

を「0」に到達するまで、最終的な目標は、列Bのセルをループです。 「0」に達すると、同じ行の列Aにおいて、列Aのすべての値の合計が、列Bの新しい「0」に達するまで計算される。 この基本例では、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がゼロのときにAが空白になるのはいつものケースですか? – SJR

+0

合計の範囲を定義するための書き込みコードを見つけることができないため、コードは準備ができていません。 BがゼロでなくてもAは空白になることがあります。 – Tefalpan

+0

vbaにする必要がありますか?数式はこれを行うため –

答えて

1

が、これは何をしたいん考えてみてください。 Findメソッドを使用して連続するゼロを検索し、各ペアの範囲を合計します。それが開始値までサイクルバックすると、ボトム値の合計になります(Bの最初の値がゼロでない場合に何が起きるか分かりません)。

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

ありがとう!それは魅力のように機能しますが、最後にゼロがある場合は合計を計算するだけなので、最後のゼロに対応する合計が「空白の合計」になります。これは、ファイルの最後にゼロを追加するだけで解決されます。コードに最後の合計を含めることも可能ですか? 最初の値は常にゼロですので、問題ありません:) – Tefalpan

+0

最後の値がゼロの場合、合計はどうなりますか? – SJR

+0

終了までのすべての値の合計 – Tefalpan

関連する問題