Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Suchen/Ersetzen laut Liste

Forumthread: VBA Suchen/Ersetzen laut Liste

VBA Suchen/Ersetzen laut Liste
15.11.2012 20:31:53
WalterK
Guten Abend,
mit dem folgenden Code aus dem Internet kann ich per Knopfdruck gleich mehrere Zellinhalte einer Spalte ersetzen.
Option Explicit
Sub SuchenErsetzen()
Dim arName1 As Variant
Dim arName2 As Variant
Dim i As Long
arName1 = Array("Apfel", "Banane", "Gurke")
arName2 = Array("Roter Apfel", "Gelbe Banane", "Grüne Gurke")
For i = LBound(arName1) To UBound(arName1)
Columns(3).Replace arName1(i), arName2(i), xlWhole
Next
End Sub
1. Frage: Anstatt die Wörter in arName1 und arName2 einzeln einzugeben möchte ich 2 Spalten (in meinem Beispiel die Spalten N und O)zur Verfügung stellen. Was müsste ich dazu ändern?
2. Frage: Ist es auch möglich, dass beim Start des Codes ein Fenster erscheint und ich dort die relevanten Spaltenbuchstaben eingebe: z.B.
Bearbeitungsspalte: C
Wort ALT: N
Wort NEU: O
Hier noch die Beispielmappe.
https://www.herber.de/bbs/user/82647.xls
Besten Dank für die Hilfe und Servus, Walter

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Suchen/Ersetzen laut Liste
15.11.2012 21:02:57
Gerd
Guten Abend Walter!
Sub SuchenErsetzen()
Dim arName1 As Variant
Dim arName2 As Variant
Dim i As Long
Dim lngSpalte As Long
arName1 = Range("N2:N" & Cells(Rows.Count, 14).End(xlUp).Row).Value
arName2 = Range("O2:O" & Cells(Rows.Count, 14).End(xlUp).Row).Value
On Error Resume Next
lngSpalte = Columns(InputBox("Spalte angeben!", "Werte ändern", "A")).Column
On Error GoTo Ende
If lngSpalte > 0 Then
For i = LBound(arName1) To UBound(arName1)
Columns(lngSpalte).Replace arName1(i, 1), arName2(i, 1), xlWhole
Next
End If
Exit Sub
Ende:
Err.Clear
End Sub
Gruß Gerd

Anzeige
AW: VBA Suchen/Ersetzen laut Liste
15.11.2012 21:36:59
WalterK
Hallo Gerd,
besten Dank für die Hilfe, funktioniert einwandfrei!
Schönen Abend noch, Walter

AW: VBA Suchen/Ersetzen laut Liste --> Änderung
16.11.2012 16:30:51
WalterK
Hallo,
beim gestern erhaltenen Code habe ich eine kleine Änderung/Ergänzung gemacht damit ich arName1 und arName2 auch über eine InputBox ändern kann.
Allerdings kommt jetzt eine Fehlermeldung (400) und ich weiß nicht wo der Fehler ist.
Hier mein Versuch arName1 und arName2 umzuschreiben:
Option Explicit
Sub SuchenErsetzen()
Dim arName1 As Variant
Dim arName2 As Variant
Dim i As Long
Dim lngSpalte As Long
Dim SpalteALT As Long
Dim SpalteNEU As Long
With ActiveSheet
SpalteALT = Columns(InputBox("SpaltenBuchstabe mit den Begriffen ALT angeben!", " _
SpaltenBuchstabe eingeben/ändern", "A")).Column
SpalteNEU = Columns(InputBox("SpaltenBuchstabe mit den Begriffen NEU angeben!", " _
SpaltenBuchstabe eingeben/ändern", "A")).Column
'        arName1 = Range("Q2:Q" & Cells(Rows.Count, 17).End(xlUp).Row).Value
'        arName2 = Range("R2:R" & Cells(Rows.Count, 18).End(xlUp).Row).Value
arName1 = .Range(.Cells(2, SpalteALT), .Cells(.Rows.Count, SpalteALT).End(xlUp).Row). _
Value
arName2 = .Range(.Cells(2, SpalteNEU), .Cells(.Rows.Count, SpalteNEU).End(xlUp).Row). _
Value
On Error Resume Next
lngSpalte = Columns(InputBox("SpaltenBuchstabe für die Suchen/Ersetzen - Spalte angeben! _
", "SpaltenBuchstabe eingeben/ändern", "A")).Column
On Error GoTo Ende
If lngSpalte > 0 Then
For i = LBound(arName1) To UBound(arName1)
Columns(lngSpalte).Replace arName1(i, 1), arName2(i, 1), xlWhole
Next
End If
End With
Exit Sub
Ende:
Err.Clear
End Sub 
Danke für die Hilfe und Servus, Walter

Anzeige
und jetzt auch auf offen gestellt
16.11.2012 16:32:43
WalterK

AW: und jetzt auch auf offen gestellt
16.11.2012 18:10:55
Christian
hallo Walter,
.Cells(.Rows.Count, SpalteALT).End(xlUp).Row liefert die Zeilennummer des letzten Eintrags in SpalteALT. Deshalb stimmt der Syntax für den Range nicht.
Also entweder:
arName1 = .Range(.Cells(2, SpalteALT), .Cells(.Cells(.Rows.Count, SpalteALT).End(xlUp).Row, SpalteALT)).Value
oder:
arName1 = .Cells(2, SpalteALT).Resize(.Cells(.Rows.Count, SpalteALT).End(xlUp).Row).Value
Gleiches natürlich für arName2.
Ggruß
Christian

Anzeige
AW: Zusatzfrage
16.11.2012 21:30:09
WalterK
Hallo Christian,
besten Dank, so geht es!
Eine Frage habe ich noch:
Wäre es auch möglich, anstatt 3 InputBoxen mit je 1 Eingabe nur 1 InputBox aufzurufen und dort gleich alle 3 Eingaben zu tätigen?
Danke und Servus, Walter

Wenn die 3 EingabeTextFelder hat... Gruß owT
17.11.2012 00:36:54
Luc:-?
:-?

Scherz beiseite; dann musst du dir überlegen, ...
17.11.2012 00:43:11
Luc:-?
…wie der GesamtText aufgebaut sein muss (und nicht zu lang wird!), Walter,
damit du später eindeutige Trennstellen zwischen den Einzeltexten identifizieren kannst. Eine derartige Eingabe musst du im Text der Box vorschreiben und am besten als Default-Wert ein entsprechendes Schema eintragen.
Oder du benutzt ein UserForm, dann träfe mein Scherz die Realität.
Gruß+schöWE, Luc :-?

Anzeige
Danke! Servus, Walter owT
17.11.2012 09:55:58
WalterK
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Suchen und Ersetzen laut Liste


Schritt-für-Schritt-Anleitung

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

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.

  3. Kopiere und füge den folgenden Code in das Modul ein:

    Option Explicit
    Sub SuchenErsetzen()
       Dim arName1 As Variant
       Dim arName2 As Variant
       Dim i As Long
       Dim lngSpalte As Long
       Dim SpalteALT As Long
       Dim SpalteNEU As Long
       With ActiveSheet
           SpalteALT = Columns(InputBox("SpaltenBuchstabe mit den Begriffen ALT angeben!", "SpaltenBuchstabe eingeben/ändern", "A")).Column
           SpalteNEU = Columns(InputBox("SpaltenBuchstabe mit den Begriffen NEU angeben!", "SpaltenBuchstabe eingeben/ändern", "A")).Column
           arName1 = .Range(.Cells(2, SpalteALT), .Cells(.Rows.Count, SpalteALT).End(xlUp)).Value
           arName2 = .Range(.Cells(2, SpalteNEU), .Cells(.Rows.Count, SpalteNEU).End(xlUp)).Value
           lngSpalte = Columns(InputBox("SpaltenBuchstabe für die Suchen/Ersetzen - Spalte angeben!", "SpaltenBuchstabe eingeben/ändern", "A")).Column
           If lngSpalte > 0 Then
               For i = LBound(arName1) To UBound(arName1)
                   Columns(lngSpalte).Replace arName1(i, 1), arName2(i, 1), xlWhole
               Next
           End If
       End With
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus: Drücke ALT + F8, wähle SuchenErsetzen aus und klicke auf "Ausführen".


Häufige Fehler und Lösungen

  • Fehler 400 beim Ausführen des Codes: Überprüfe, ob die Eingaben in den InputBoxen korrekt sind und ob die angegebenen Spaltenbuchstaben existieren.
  • Kein Ersatz erfolgt: Stelle sicher, dass die Werte in den Spalten ALT und NEU korrekt sind und dass die bearbeitete Spalte die Werte enthält, die ersetzt werden sollen.

Alternative Methoden

  • Excel Suchen und Ersetzen Funktion: Du kannst auch die integrierte Suchen und Ersetzen Funktion von Excel verwenden (Strg + H), um Werte in einer Spalte zu ersetzen, ohne VBA zu nutzen.
  • Verwendung von Formeln: Nutze die WENN-Funktion, um Werte in einer neuen Spalte basierend auf Bedingungen zu ersetzen, anstatt ein Makro zu verwenden.

Praktische Beispiele

Beispiel 1: Ersetze "Apfel" durch "Roter Apfel" in Spalte C, während die Werte in Spalte N und O stehen.

Beispiel 2: Verwende den Code für das Excel Makro Suchen und Ersetzen, um mehrere Werte in einer Spalte zu ersetzen, z.B. "Banane" durch "Gelbe Banane".


Tipps für Profis

  • Fehlerbehandlung einbauen: Nutze On Error Resume Next um Fehler zu ignorieren und On Error GoTo Ende für eine gezielte Fehlerbehandlung.
  • UserForms verwenden: Um die Benutzereingabe zu verbessern, kannst Du ein UserForm erstellen, das die Eingaben für die Spaltenbuchstaben vereinfacht.
  • Makros speichern: Speichere Deine Excel-Datei im .xlsm-Format, um sicherzustellen, dass die Makros erhalten bleiben.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Werte gleichzeitig suchen und ersetzen?
Nutze das oben bereitgestellte VBA-Skript, um mehrere Werte in einer Spalte zu ersetzen, indem Du die Listen in den Spalten ALT und NEU definierst.

2. Ist das Makro auch in älteren Excel-Versionen verfügbar?
Ja, das VBA Makro funktioniert in den meisten Excel-Versionen, die VBA unterstützen, einschließlich Excel 2007 und neuer.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige