Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1560to1564
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Weitere Schleife (inneren oder äußeren)

Weitere Schleife (inneren oder äußeren)
11.06.2017 15:52:21
VBA-Anfänger
Hallo liebe VBA-Freunde,
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)…

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Weitere Schleife (inneren oder äußeren)
11.06.2017 15:57:06
VBA-Anfänger
Entschuldig:
"Also:
For z= 1 to 23 ….
rngKennzahlen(i,3 + offset von 24)…" hier ist 14 gemeint! nicht 24!
AW: Weitere Schleife (inneren oder äußeren)
12.06.2017 13:21:38
Zwenn
Hallo,
leider werde ich aus Deinem Code nicht so ganz schlau. In den VBA Editor kann man ihn auch nicht einfach übernehmen.
Wirklich falsch von der Syntax her ist diese Zeile:
s = ErstMonat.Column ErstMonat.Column – 1
Bitte benutze in Zukunft den Button Code pre, um VBA Code zu posten. Der lässt sich sonst einfach schwer lesen.
Soweit ich Dein Problem verstanden habe, brauchst Du einfach nur eine weitere Schleife um Deine vorhandene legen. Das folgende kleine Makro kannst Du einfach übernehmen und aus einer leeren Tabelle starten. An der Ausgabe kannst Du sehen, dass die äußere Schleife immer eine Zeile weiter springt, während die innere Schleife die Werte spaltenweise ausgibt.

Sub SchleifeInSchleife()
Dim spalte As Integer 'Schleifenzähler innere Schleife
Dim zeile As Integer 'Schleifenzähler äußere Schleife
'Außere Schleife für 24 Aufrufe der inneren Schleife
For zeile = 1 To 24
'Innere Schleife für 12 Aufrufe zur Ausgabe von Werten
For spalte = 1 To 12
'In der aktuellen Tabelle Schleifendurchläufe ab A1 ausgeben
Cells(zeile, spalte).Value = "Zeile: " & zeile & Chr(10) & "Spalte: " & spalte
Next spalte
Next zeile
End Sub
Den Teil mit Deinem Wunsch nach einem Offset, der immer 14 betragen soll habe ich nicht verstanden. Wenn Du immer alles 14 Zeilen/ Spalten weiter ausgibst, überschreibst Du doch bei jedem Durchlauf die Werte des zuvor durchgeführten Durchlaufs wieder. Falls die alle untereinander/ nebeneinander stehen sollen am Ende, brauchst Du im Beispielmakro oben nur die Laufweite der Schleifen verändern. Das sind ja 1 zu 1 die Zeilen- und Spaltenwerte, in denen die Werte ausgegeben werden. Spiel einfach mal damit rum.
Du hast Deine Tabellen und Variablen zwar alle mit Text beschrieben, dass kann aber kein Mensch nachvollziehen, zumal es sich auch noch um unterschiedliche Tabellen handelt, aus denen Du Daten holst und in die Du sie dann wieder reinschreibst. Es ist wesentlich leichter, wenn Du eine Beispielmappe hochlädst.
Viele Grüße,
Zwenn
Anzeige
AW: Weitere Schleife (inneren oder äußeren)
12.06.2017 15:59:33
Zwenn
Hallo nochmal,
ich habe mein kleines Beispielmakro mal in der Weise erweitert, dass die Mechanik besser ersichtlich ist. Vor allem hast Du so auch Offsets mit drin, die Du als Zahl angeben kannst.

Sub SchleifeInSchleife()
Dim spalte As Integer        'Schleifenzähler innere Schleife
Dim zeile As Long            'Schleifenzähler äußere Schleife
Dim offsetSpalte As Integer  'Verschiebung der Ausgabe um Spalten nach rechts
Dim offsetZeile As Long      'Verschiebung der Ausgabe um Zeilen nach unten
Dim anzahlSpalten As Integer 'Anzahl der auszugebenden Spalten
Dim anzahlZeilen As Long     'Anzahl der auszugebenden Zeilen
'Offsets initialisieren
offsetSpalte = 0
offsetZeile = 14
'Anzahl Spalten und Zeilen initialisieren
anzahlSpalten = 12
anzahlZeilen = 6
'Außere Schleife für die Anzahl zu schreibender Zeilen
'Dies ist gleich der Anzahl der Aufrufe der inneren Schleife
For zeile = 1 To anzahlZeilen
'Innere Schleife für die Anzahl zu schreibender Spalten
'Dies ist gleich der Anzahl der Aufrufe zur Ausgabe
'für eine Zeile von Werten
For spalte = 1 To anzahlSpalten
'In der aktuellen Tabelle Schleifendurchläufe ab A1 zuzüglich
'Offsets für Spalten und Zeilen ausgeben
Cells(zeile + offsetZeile, spalte + offsetSpalte).Value = _
"Zeile: " & zeile + offsetZeile & Chr(10) & "Spalte: " & spalte + offsetSpalte
Next spalte
Next zeile
End Sub
Viele Grüße,
Zwenn
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige