Microsoft Excel

Herbers Excel/VBA-Archiv

Loop in Loop


Betrifft: Loop in Loop von: FabySan
Geschrieben am: 30.01.2018 16:24:32

Hallo liebe Forum-Mitglieder,

ich habe ein Problem, das ich gerne per VBA lösen möchte, welches jedoch meine bescheidenden Kenntnisse übersteigt. Es geht um folgendes: In der Spalte AH, Zeile 17:31 und 53:67, 89:103 usw. habe ich Blöcke mit Werten, dass ganze 30 mal und immer 36 Zeilen weiter gesprungen. Daneben befinden sich umgedrehte Dreiecke die ebenfalls mit Werten befüllt sind. Nun möchte ich gerne per VBA, dass Excel den obersten Wert in dem Werteblock (AH17) minus dem letzten Werten in der letzten befüllten Spalte des Dreiecks rechnet (Q17) und die Differenz dann in AH 17 einträgt.

Ein weiteres Bespiel: Für den Fall AH18 müsste dann AH18 - P18 gerechnet werden und die Differenz in AH 18 eintragen werden. Ist dies für den ganzen Block geschehen, also bis AH31 (was dann AH31 - C31 wäre) soll VBA zum nächsten Block springen, der bei AH53 startet.

Ich wollte das Ganze durch eine Schleife in der Schleife lösen, leider stürzt mein Excel beim durchführen des Subs immer ab.

Sub Calculation()

Call Set_Sheets

j = i * 36
x = 17

With PaidSheet
    Do Until Cells(.Rows.Count, 34).End(xlUp).row = ""
        For n = 0 To 14
        Cells(x + n, 34).Value = ActiveCell.Value - Cells(x + n, x - n).Value
        Next n
        For i = 1 To 2
        If n = 14 Then x = 17 + j
        Next i
    Loop
End With
 
End Sub
Anbei eine Testdatei die den Aufbau verdeutlichen soll. Vielen Dank schon Mal für jede Hilfe.

https://www.herber.de/bbs/user/119415.xlsx

LG

  

Betrifft: AW: Loop in Loop von: Daniel
Geschrieben am: 30.01.2018 16:53:26

Hi

ich würde da in eine Hilfsspalte (AI) eine entsprechende Formel eintragen und das Formelergebnis dann nach AH kopieren:

Sub test()
With Range("AI17:AI" & Cells(Rows.Count, "AH").End(xlUp).Row)
    .FormulaR1C1 = _
       "=IF(ISNUMBER(RC34),RC34-INDEX(RC3:RC32,1,COUNT(RC3:RC32)),IF(RC34="""","""",RC34))"
    .Copy
    Range("AH17").PasteSpecial xlPasteValues
    .ClearContents
End With
End Sub
Gruß Daniel


  

Betrifft: AW: Loop in Loop von: FabySan
Geschrieben am: 31.01.2018 10:29:26

Hallo Daniel,

danke für die Hilfe und den guten Tipp.

LG


  

Betrifft: AW: Loop in Loop von: Rudi Maintaire
Geschrieben am: 30.01.2018 16:56:31

Hallo,
für 30 Blöcke zu 15 Zeilen:

Sub aaaa()
  Dim i As Integer, k As Integer, lRow As Long
  Application.ScreenUpdating = False
  For i = 0 To 29
    For k = 0 To 14
      lRow = i * 36 + 17 + k
      Cells(lRow, 34) = Cells(lRow, 34) - Cells(lRow, 17 - k)
    Next k
  Next i
End Sub

Gruß
Rudi


  

Betrifft: AW: Loop in Loop von: FabySan
Geschrieben am: 31.01.2018 10:28:38

Hallo Rudi,

vielen Dank, das klappt super.

LG