Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Jede Zeile der Spalte durchgehen und ändern

Jede Zeile der Spalte durchgehen und ändern
29.11.2017 10:56:37
Benjamin
Hallo zusammen,
ich habe folgenden Code, um Werte in einer Spalte zu ändern.
wert = "Auto-Haus"
wert_neu = Right(wert, Len(wert) - InStrRev(wert, "\", , vbTextCompare))
Ausgabe: Haus
Mit diesem Code entferne eine Teil des Strings bis zum Bindestrich. Das klappt alles ganz gut. Ich möchte das aber jetzt für meine Tabelle anwenden. Die Spalte heißt "Code" und befindet sich in der Zelle ("J1"). Das heißt ich möchte jede alle Werte dieser Spalte durchgehen und mit dem Code oben bearbeiten. Das geht wahrscheinlich mit einer For-Schleife, nur habe ich es nicht hinbekommen. Ich freue mich sehr, wenn mir jemand behilflich sein kann.
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Jede Zeile der Spalte durchgehen und ändern
29.11.2017 11:11:07
Bernd
Hi,
meinst Du so:
Sub ZEntfernen()
Dim start As Long, letzte As Long, lngZ As Long, strW As String, rngD As Range
'   Application.ScreenUpdating = False          ' nach dem Test aktivieren
start = 2
letzte = ActiveSheet.Range("J65536").End(xlUp).Row
For lngZ = letzte To start Step -1
strW = Cells(lngZ, 10).Value
Cells(lngZ, 10) = Right(strW, InStr(1, strW, "-", vbTextCompare) - 1)
Next
Application.ScreenUpdating = True
End Sub

MfG Bernd
Anzeige
AW: Jede Zeile der Spalte durchgehen und ändern
29.11.2017 14:12:09
Benjamin
Vorerst herzlichen Dank für die Hilfe. Hut ab und Daumen hoch für diese ehrenamtliche Unterstützung! Der Code funktioniert super!
Ich hätte da ein paar Fragen zum Code:
1) Warum hast du extra die Variable "start" gesetzt, obwohl man auch einfach bei der For-Schleife eine 2 schreiben kann?
2) Warum beginnt diese Zahl bei 2?
3) die -1 ist ja deswegen negativ, weil die Schleife rückwärts durchgeht. Liege ich da richtig?
4) Warum hast du bei Range die Zahl auf 65536 gesetzt? Kann man das nicht so machen, dass man einfach die Zellen berücksichtigt, die Werte enthalten?
Keiner dieser Fragen ist auf keinen Fall Kritik oder sonstiges. Dienen nur zu meinem besseren Verständnis. Falls das zu viel wird mit den Fragen, verstehe ich das auch.
Danke sehr!!
Anzeige
AW: Jede Zeile der Spalte durchgehen und ändern
29.11.2017 14:43:13
Daniel
HI
wenn du den Text vor dem Bindestrich entfernen willst, würde das für die ganze Spalte auch mit der Menüfunktion ERSETZEN gehen, in dem du "*-" durch nichts ersetzt, der Haken bei "gesamten Zellinhalt vergleichen" darf nicht gesetzt sein.
als VBA-Code dann:
Range("J:J").Replace what:="-*", Replacement:="", lookat:=xlpart

deine Schleife würde so aussehen:
dim Zelle as range
dim Wert as string
dim WertNeu as string
for each Zelle in Columns(10).SpecialCells(xlcelltypeconstants, 3)
wert = Zelle.Value
WertNeu = Mid(wert, InstrRev(wert, "-") + 1)
Zelle.Value = WertNeu
Next
Gruß Daniel
Anzeige
AW: Jede Zeile der Spalte durchgehen und ändern
04.12.2017 11:31:41
Benjamin
Vielen Dank für deine Hilfe Daniel. Funktioniert super! Großes Dankeschön an euch beide.
Hätte da eine Frage:
Ar = Cells(1).CurrentRegion
ReDim Br(UBound(Ar), UBound(Ar, 2))
For z = 1 To UBound(Ar)
Br(z, 1) = Ar(z, 1)
Br(z, 2) = Ar(z, 3)
Br(z, 3) = Ar(z, 13)
Br(z, 4) = Ar(z, 4)
Br(z, 5) = Ar(z, 5)
Br(z, 6) = Ar(z, 6)
Br(z, 7) = Ar(z, 7)
Br(z, 8) = Ar(z, 8)
Br(z, 9) = Ar(z, 2)
Br(z, 10) = Ar(z, 9)
Br(z, 11) = Ar(z, 14)
Br(z, 12) = Ar(z, 15)
Br(z, 13) = Ar(z, 10)
Br(z, 14) = Ar(z, 11)
Br(z, 15) = Ar(z, 12)
Next z
Cells(1).Resize(UBound(Br) + 1, UBound(Br, 2) + 1) = Br
Mit diesem Code hier vertausche ich die Reihenfolge der einzelnen Spalten. Funktioniert auch ganz gut. Aber am Ende platziert es die neuen Werte ab der Zelle(2, 2). Ich möchte aber, dass es bei Zelle(1, 1) beginnt. Weil sonst habe ich eine eine freie Zelle link und oben. Hat da jemand ne Lösung dafür? Irgendwas muss ich wohl an der letzten Zeile ändern. Habs nicht hinbekommen..
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Jede Zeile der Spalte durchgehen und ändern


Schritt-für-Schritt-Anleitung

Um jede Zeile einer bestimmten Spalte in Excel zu bearbeiten, kannst du den folgenden VBA-Code verwenden. In diesem Beispiel gehen wir davon aus, dass du die Werte in der Spalte "J" ändern möchtest, indem du den Text nach einem Bindestrich entfernst.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen und wähle Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub ZEntfernen()
       Dim start As Long, letzte As Long, lngZ As Long, strW As String
       start = 2
       letzte = ActiveSheet.Range("J65536").End(xlUp).Row
       For lngZ = letzte To start Step -1
           strW = Cells(lngZ, 10).Value
           Cells(lngZ, 10) = Right(strW, InStr(1, strW, "-", vbTextCompare) - 1)
       Next
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aus, um die Änderungen vorzunehmen.


Häufige Fehler und Lösungen

  • Fehler: "Typenübereinstimmung" beim Ausführen des Codes.

    • Lösung: Stelle sicher, dass die Spalte "J" tatsächlich Werte enthält und keine leeren Zellen vorhanden sind.
  • Fehler: Das Makro ändert nicht alle Zellen.

    • Lösung: Überprüfe den Range, den du in letzte definiert hast. Möglicherweise ist der letzte Wert nicht korrekt ermittelt.

Alternative Methoden

Eine einfachere Methode, um den Text vor einem Bindestrich in Excel zu entfernen, ist die Verwendung der integrierten ERSETZEN-Funktion. Du kannst auch den folgenden VBA-Code nutzen, um alle Zellen in der Spalte zu ändern:

Range("J:J").Replace what:="-*", Replacement:="", lookat:=xlpart

Diese Methode ist besonders nützlich, wenn du den Text in mehreren Zellen gleichzeitig bearbeiten möchtest.


Praktische Beispiele

Wenn du beispielsweise in der Spalte "J" die Werte "Auto-Haus", "Fahrrad-Haus" und "Zug-Haus" hast, wird der Code die Werte in "Haus" umwandeln:

  • Ursprünglich:
    • Auto-Haus
    • Fahrrad-Haus
    • Zug-Haus
  • Nach Ausführung des Codes:
    • Haus
    • Haus
    • Haus

Tipps für Profis

  • Nutze die Application.ScreenUpdating = False-Anweisung zu Beginn deines Codes, um die Bildschirmaktualisierung während der Ausführung des Makros zu deaktivieren. Dies verbessert die Leistung.
  • Wenn du häufig mit ähnlichen Aufgaben arbeitest, kannst du den Code anpassen, um mehrere Spalten gleichzeitig zu bearbeiten.

FAQ: Häufige Fragen

1. Warum beginnt die Schleife bei 2?
Die Schleife beginnt bei 2, da in der Regel die erste Zeile die Überschriften enthält, die nicht bearbeitet werden sollen.

2. Was bewirkt die -1 in der Schleife?
Die -1 sorgt dafür, dass das Ergebnis der InStr-Funktion korrekt berechnet wird, wenn die Schleife rückwärts durch die Zeilen geht.

3. Kann ich den Code anpassen, um mehrere Spalten gleichzeitig zu bearbeiten?
Ja, du kannst den Code erweitern, indem du weitere Cells- oder Range-Anweisungen für die gewünschten Spalten hinzufügst.

4. Wie kann ich den Code ändern, um die neuen Werte bei Zelle(1, 1) zu platzieren?
Ändere die letzte Zeile des Codes zu:

Cells(1, 1).Resize(UBound(Br) + 1, UBound(Br, 2) + 1) = Br

Dies platziert die neuen Werte in der ersten Zeile der Tabelle.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige