chrisdynamite
Goto Top

Excel Schleife durchschnittlich kompliziert

Guten Abend,

die Umsetzung habe ich mir überlegt, nur jetzt scheitert es an der Syntax.

Wie erreiche ich den effekt, dass in excel per vba folgendes passiert. die koplette spalte b soll in einem datenblatt nach dem wort "konto" durchsucht werden und sobald dieses wort gefunden wird soll der wert 1 feld über konto eine zeile links neben konto und auch an alle weiteren felder darunter geschrieben werden, bis wieder in spalte b das wort konto vorkommt und wieder der wert 1 feld über dem wort konto links neben das feld konto geschrieben wird, so lange bis wieder das wort konto vorkommt usw. das wort konto kann nur in spalte b vorkommen und es sollte von oben nach unten abgearbeitet werden, bis das wort konto nicht mehr erscheint.

alternative: kennt jemand ein buch, welches das an mich heranführen kann?

grüße chris

vorher

85dff4d907ca2a5111c13c272e2f201f

nachher

d295fe890570cd077fa46baf5f1d199a

Content-Key: 214418

Url: https://administrator.de/contentid/214418

Printed on: April 23, 2024 at 14:04 o'clock

Member: bastla
bastla Aug 15, 2013, updated at Aug 16, 2013 at 06:01:44 (UTC)
Goto Top
Hallo ChrisDynamite!

Das sollte sich etwa so machen lassen:
Sub Aufbereiten()
AbZeile = 2
Spalte = 2 'Spalte B  
Suche = "*Konto*"  

Zeile = AbZeile
Wert = Cells(Zeile, Spalte).Value 'Zelleninhalt holen  
Do While Wert <> "" 'Solange Zelle nicht leer  
    If Wert Like Suche Then 'Suchbegriff enthalten?  
        Konto = Cells(Zeile - 1, Spalte).Value 'Konto aus darüber liegender Zelle lesen  
    End If
    Cells(Zeile, Spalte - 1).Value = Konto 'Konto links neben aktueller Zelle eintragen  
    Zeile = Zeile + 1 'nächste Zeile  
    Wert = Cells(Zeile, Spalte).Value 'Zelleninhalt holen  
Loop
End Sub

Grüße
bastla
Member: ChrisDynamite
ChrisDynamite Aug 15, 2013 at 21:21:39 (UTC)
Goto Top
ich werde den code testen, schonmal vielen Dank!

bitte nenne mir noch ein gutes buch indem ich das auch mal selbst checken kann.
Member: ChrisDynamite
ChrisDynamite Aug 15, 2013 updated at 21:31:01 (UTC)
Goto Top
kuhl vielen dank der code funktioniert echt gut. prima eins fällt mir noch auf, sobald die abfrage nach einem zweiten konto wert kommt, macht das script nicht mehr weiter siehe bild

df7ca077200066ec586f817271fcb1a0

danke vielmals!

normalerweise sollten nun die vorderen zeilen mit dem neuen wert über konto gefüllt werden, also 5611
Member: ChrisDynamite
ChrisDynamite Aug 15, 2013 updated at 21:43:44 (UTC)
Goto Top
ich habe nun die felder "besser formatiert" also dass nicht mehr die grünen ecken angezeigt werden. nun ist der effekt, dass alle felder davor mit dem wert 5610 beschrieben werden und 5611 missachtet wird.

Nachtrag, nein es scheint eher so, als dass in zeile 70 die vba nichts mehr machen zu wollen, wen ich das feld konto zwischendrin eintrage wird der wert darüber übernommen. super sache face-smile nur leider hört das script in zeile 70 auf.
Member: ChrisDynamite
ChrisDynamite Aug 15, 2013 at 21:46:34 (UTC)
Goto Top
solange zelle nicht leer dürfte das problem sein.
Member: ChrisDynamite
ChrisDynamite Aug 15, 2013 at 21:50:43 (UTC)
Goto Top
ich habe das nun gelöst indem ich festgelegt habe Do While Wert <> "exit" 'Solange Zelle nicht leer. den wert exit habe ich gaaaaaanz tief unten gelegt. gibt es noch galantere möglichkeiten. wirklich super script. das hat für zumindest freitag meinen kopf gerettet. danke bastla face-smile
Member: bastla
bastla Aug 16, 2013 at 06:01:27 (UTC)
Goto Top
Hallo ChrisDynamite!

Aufgrund Deines Beispiels war ich von zusammenhängenden Daten ausgegangen - Alternative:
Sub Aufbereiten()
AbZeile = 2
Spalte = 2 'Spalte B  
Suche = "*Konto*"  

BisZeile = Cells(Rows.Count, Spalte).End(xlUp).Row 'letzte Zeile mit einem Wert in "Spalte" ermitteln  

For Zeile = AbZeile To BisZeile
    Wert = Cells(Zeile, Spalte).Value 'Zelleninhalt holen  
    If Wert Like Suche Then 'Suchbegriff enthalten?  
        Konto = Cells(Zeile - 1, Spalte).Value 'Konto aus darüber liegender Zelle lesen  
        Cells(Zeile - 1, Spalte - 1).Value = "" 'Zellinhalt neben neuem Konto löschen  
    End If
    If Trim(Wert) <> "" Then Cells(Zeile, Spalte - 1).Value = Konto 'Wenn Zelle nicht leer, Konto links neben aktueller Zelle eintragen  
Next
End Sub
Grüße
bastla