Weitere Schleife (inneren oder äußeren)
11.06.2017 15:52:21
VBA-Anfänger
ich bin ein EXCEL-Anfänger und bräuchte für folgende Schleife (die ich eben gerade noch verstanden habe .....) eine Ergänzung. Diese Schleife funktioniert wunderbar. Allerdings reicht sie so nicht aus und muss ergänzt werden.
Ich werde nun die Deklarationen nennen bzw. erklären bzw. auch die Sub. Ich hoffe ich habe keine Deklaration vergessen. Die gesamte Sub ist viel größer. Aber letztendlich gehts um den IF-Block (siehe unten).
MeinBeispiel()
Dim rngData, rngKennzahlen, ErstMonat As Range
Dim i As Integer
Dim s As Long
****************************************************************************
Zum Verständnis:
rngkennzahlen ( i,3) = Quellzeilen. Z.B. 14 = 14 ist die Zeile für die Quelle. Die Spalte ist E, siehe weiter unten.
wbBasisbericht = Quelldatei, also dort, wo die Werte die ich haben will drin stehen
ErstMonat= ist ein Datumswert, der rausgesucht wird und relevant ist für die ZielRange (die der Quelle entspricht).
****************************************************************************
Nun die Sub.
For i = 1 To rngKennzahlen.Rows.Count
wie viele kennzahlen gibt es ? im rngKennzahlen steckt in der 3 Spalte eine Zahl für die QuellZeile. In der 4 Spalte der Name des Tabellenblattes. Zur Info Es gibt 2 Tabelleblätter in der Quelle. Selber Aufbau.
If Not IsEmpty(rngKennzahlen(i, 4).Value) Then
bist du in der Quelldatei im richtigen Tabellenblatt, das in 4ter Spalte definiert ist?
With wbBasisbericht.Worksheets(rngKennzahlen(i, 4).Value)
gehört zur Prüfung bzw. Einstellung des Tabellenblattes in der Quelle
s = ErstMonat.Column ErstMonat.Column 1
die Quelle Spalte ist S. S ist die Spaltenanzahl in einer Range wohin er hinspringt. Somit hat die Zielspalte bzw. Zeile das korrekte Datum wie die Quelle. -1 da eine Spalte nicht berücksichtigt werden soll.
If .Range("E" & rngKennzahlen(i, 3)).Value 0 Then
Wenn ein Wert in der Quelle steht, dann ..Zur Info: Quelle ist Spalte E, i ist ja die Anzahl der kennzahlen die er hintereinander ausliest. Jede Kennzahl hat eine Quellzeile. Diese steckt in rngKennzahlen in der 3. Spalte
rngData.Cells(i + 1, s).Value = .Range("E" & rngKennzahlen(i, 3)).Value
füge es im Ziel ein.
End If
s = s + 1
End With
End If
Next i
******************************************************************************
Mein Problem nun: Wenn er alle Kennzahlen einmal übertragen hat (also i = sein Maximum erreicht hat), soll er nochmal alles wiederholen 23 wiederholen, allerdings mit immer einem Offsett bei den Zeilen.
Wenn das I einmal durchlaufen ist, ist es 1 Monat. Ich will insgesamt 24 Monate. Das I ist einmal durchlaufen, wenn man den ganzen IF-Block oben normal ausführt ..
Nach dem ersten Monat muss er einfach diese Prozedur weitere 23 maldurchlaufen. Allerdings dann immer + Offsett von 14 Zeilen. 1 von 23 wäre also Februar.
Also:
For z= 1 to 23 .
rngKennzahlen(i,3 + offset von 24)