Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1816to1820
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

Schleife, Inhalt prüfen

Schleife, Inhalt prüfen
02.03.2021 12:28:18
FL
Hallo,
leider bin ich nicht fündig geworden und freue mich über jede Hilfe.
Anbei habe ich Euch auch ein Beispielexcel gepackt.
https://www.herber.de/bbs/user/144374.xlsx
Ich möchte ein Makro entwickeln, welches Meine Spalte A durchläuft und erkennt, wenn ein anderer Eintrag in der Spalte ist. (Hier zb. von Max auf Otto, Otto auf Lieschen usw.)
Dabei soll unter jedem Wechsel eine Leerzeile eingefügt werden, zur besseren Übersicht. (Hier einfügen zwischen zeile 5&6, 6&7, 7&8, 9&10)
Wichtig: Die Tabelle1 beinhaltet Rohdaten die sich immer wieder aktualisieren und komplett anders sind, deshalb ist mir ein Makro wichtig (für mich und Kollegen benutzbar). Ordiginal geht über sehr viele Zeilen.
Also
1.Makro soll Spalte A durchlaufen
2.Erkennen/Prüfen wenn Wert sich ändert
3.Eine Leerzeile einfügen
Ich hoffe, dabei kann mir jemand helfen.
Sonnige Grüße

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zum Testen
02.03.2021 12:38:16
Fennek
Hallo,
eine gute Datenstruktur zu zerstören bringt nur neue Fragen.
Aber troztdem:

Sub Main
for i = cells(rows.count, 1).end(xlup).row to 3 step -1
if cells(i,1)  cells(i-1,1) then rows(i).entirerow.insert
next i
End Sub
mfg

AW: zum Testen
02.03.2021 12:48:32
FL
Hallo,
super das klappt einwandfrei!
"eine gute Datenstruktur zu zerstören bringt nur neue Fragen"
Da gebe ich dir recht!
Bin gerade am überlegen wie man die 4 Zeilen von Max Mustermann in ein neues Blatt expliziert für Ihn kopieren würde. Analog, dann die eine Zeile für Otto, eine für Lieschen, zwei für Erika usw.
Das Makro soll quasi die zueinander passenden Zeilen an eine bestimmte Stelle kopieren.
Wüsstest du da zufällig auch etwas für?
Vielen Dank für deine Mühe!
Grüße

Anzeige
AW: Range.Areas
02.03.2021 13:00:02
Fennek
Die neue Struktur sind durch Leerzeilen getrennte Blöcke: Die kann man sehr gut ansprechen mit
Pseudocode:

for each ar in columns(1).specialcells(xlTypeConstant).areas
mfg

AW: Range.Areas
02.03.2021 13:09:05
FL
Das klingt gut!
Ich glaube nur meine Basiskenntnisse reichen doch nicht.
Gehen wir davon aus, wir kopieren die Area von Max nach Blatt "Tabelle2" an die Zelle "A2".
Wie würde es dann aussehen?
Pseudocode:
Sub Main()
Dim i As Integer
For i = Cells(Rows.Count,1).End(xlUp).Row To 3 Step -1
If Cells(i,1) Cells(i-1,1) Then Rows(i).EntireRow.Insert
For Each ar In Columns(1).SpecialCells(xlTypeConstant).Areas
Next i
End Sub
Liebe Grüße

Anzeige
AW: Range.Areas Beispiel
02.03.2021 13:22:59
Fennek

sub Max
for each ar in columns(1).specialcells(2).areas
ar.currentregion.copy sheets(2).cells(1,1)
exit sub '
Wenn mehrere Blöcke kopiert werden soll, muss das Ziel geeignet gewählt werden.

AW: zum Testen
02.03.2021 13:59:41
Daniel
Hi
das geht auch einfach, wenn die Liste sortiert ist.
dann ohne die Leerzeilen.
1. nimm die Zelle A2
2. suche den Text aus A2 in der Spalte A mit der Option: .FIND(..., Searchdirection:=xlprevious)
damit findest du dann das letzte Vorkommen dieses Textes.
3. kopiere dann die Zeilen zwischen A2 und der gefundenen Zeile
4. verschiebe jetzt die gefundene Zeile um eine Zeile nach unten und steige dann mit dieser Zelle als Startwert in die Schleife bei 1. wieder ein
mit einer Do-Schleife sollte das also einfach zu lösen sein.
Code-Beispiele zum Kopieren gibts auch in Archiven wenn du ein bisschen suchst.
Gruß Daniel

Anzeige
AW: Schleife, Inhalt prüfen
02.03.2021 13:47:23
Daniel
Hi
das geht am besten mit zwei Hilfsspalten.
1. Hilfsspalte enthält einfach die Zeilennummer
2. Hilfsspalte enthält eine Formel, die die Zeilennummer ausgibt, wenn nach dieser Zeile eine Leerzeile eingefügt werden soll (dh dann wenn der Wert aus Spalte A ungleich dem Wert in der Zeile drunter ist
dann kopiest du die zweite Hilfsspalte und fügst die unterhalb der ersten Hilfsspalte als Wert wieder ein.
jetzt sortierst du die Liste nach der ersten Hilfsspalte.
zum Schluss die beiden Hilfsspalten löschen.
geht auch als Makro:
Sub test()
With ThisWorkbook.Sheets(1).UsedRange
With .Columns(.Columns.Count + 1).Resize(, 2)
.Columns(1).FormulaR1C1 = "=Row()"
.Columns(2).FormulaR1C1 = "=IF(OR(Row(RC) 0 Then
.Columns(2).SpecialCells(xlCellTypeFormulas, 1).Copy
.Cells(1).Offset(.Rows.Count, 0).PasteSpecial xlPasteValues
.Worksheet.UsedRange.Sort key1:=.Cells(1), order1:=xlAscending, Header:=xlNo
End If
.EntireColumn.ClearContents
End With
End With
End Sub

im Makro noch zusätzlich mit der Überprüfung, dass bei einer vorhandenen Leerzeile keine weitere Leerzeile eingefügt wird.
das dürfte bei großen Datenmengen schneller sein als das einzelnen Einfügen von Zeilenn nach jedem Wechsel.
Außerdem kannst du, wenn du das Prinzip verstanden hast, das ganze auch in kürzester Zeit ohne Makro von Hand ausführen.
Gruß Daniel

Anzeige
AW: Schleife, Inhalt prüfen
02.03.2021 14:15:38
FL
Vielen Dank euch beiden für die schnellen Antworten!
Ich werde mich damit jetzt erstmal auseinandersetzen und versuchen das zu verstehen!
Werde mich dazu so bald wie möglich melden :)
Liebe Grüße

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige