Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1284to1288
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

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

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

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

Anzeige
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 :-?

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

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige