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

VBA Suchen und Ersetzen

Forumthread: VBA Suchen und Ersetzen

VBA Suchen und Ersetzen
02.12.2025 12:22:31
addi
Hallo Zusammen,
vorab - leider kann ich keine Datei hochladen - dies ist im Firmennetzwerk gesperrt, daher versuche ich mein Anliegen zu erklären.
Ich habe eine umfangreiche Excel Datei die ich bereits via VBA bearbeite. Nun möchte ich noch ein Bearbeitungsschritt hinzufügen.
In der Spalte H stehen Artikelnummern. Zu ca. 80% sind diese Nummern auch korrekt. 20% müsste ich durch andere Nummern tauschen.
Hierbei ist es so das es eine 1:1 Zuordnung gibt.... d.h. z.B. die Nummer 2071 muss durch 207108 ersetzt werden. Dieses Mapping betrifft ca. 300
Artikelnummern. Hier können auch immer wieder welche hinzukommen.
Wie kann ich das am besten abbilden und dann auch als Suchen und Ersetzen in das VBA Coding einbinden?
Vielen Dank vorab für Eure Unterstützung.
Viele Grüße
addi
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Suchen und Ersetzen
02.12.2025 12:56:13
cysu11
Hallo Addi,

wie ist die Logik? Zu suchende Nr. ist immer 4stellig und die ersetzende Nr. fängt immer mit den gleichen 4 Stellen an wie di zu suchende?
Paar mehr Beispiele mit evt. unterschiedliche Konstellationen wäre hilfreich?

LG, Alexandra
AW: VBA Suchen und Ersetzen
02.12.2025 16:07:28
addi
Vielen Dank Alexandra,
ich bin auf den Tipp und die Hilfe von Daniel eingegangen...
Viele Grüße addi
Anzeige
AW: VBA Suchen und Ersetzen
02.12.2025 13:14:13
daniel
Hi

am einfachsten so per VBA

1. suche dir zwei frei nebeneinander liegende Spalten (bespielsweise Spalte AA und AB)
trage in die erste Spalte (AA) untereinander die alten Nummern ein (AA1: 2071) und in die Zelle daneben die neue (AB1: 207108)

2. verwende das diesen Code.
Dim Zelle As Range

for each Zelle in Columns(27).Specialcells(xlcelltypeconstants, 3).cells
Columns(8).Replace Zelle.value, Zelle.Offset(0, 1).value, lookat:=xlwhole
next


Gruß Daniel
Anzeige
AW: VBA Suchen und Ersetzen
02.12.2025 14:38:11
addi
Hallo Daniel,
vielen Dank schon mal für Deine Rückmeldung. Da sich das Excel auch erst mit meinem vorhandenen VBA Coding aufbaut und formartiert ist es einerseits
schwierig in dem Excel dieses Mapping zu hinterlegen. Die Basisdatei dazu kommt aus einem anderen System und wird dann erst bearbeitet.
Aufgrund Deines Tipps könnte ich mir ggf. vorstellen das ich eine separate Mapping Tabelle mache, die dann an einem bestimmten Ort ablege und dann ggf. mit dem
Makro auf diese Datei zugreife um die relevanten Artikelnummern zu ersetzen....wäre das auch möglich?
VG addi
Anzeige
AW: VBA Suchen und Ersetzen
03.12.2025 09:36:37
addi
Hallo Daniel,
Du hast mir ja das Coding zur Verfügung gestellt wenn ich das Mapping im gleichen Sheet hinterlegen würde.
Ich habe nun eine extra Datei erstellt wo ich dieses Mapping hinterlegt habe...könntest Du mir ggf. sagen wie ich hier am besten vorgehe und wie ich das Coding aufbaue...
...sprich das Öffnen der Datei dann das Abgreifen der Daten aus der Datei und das Suchen und Ersetzen und dann ggf. auch noch das Schließen der Mappingdatei?
Da komme ich aktuell leider nicht weiter....
Vielen Dank und Gruß, addi
Anzeige
AW: VBA Suchen und Ersetzen
03.12.2025 09:47:47
schauan
Hallo Addi,

eventuell bekommst Du das sogar selbst hin.
Kennst Du den Makrorekorder?
https://www.clever-excel-forum.de/Thread-Excel-Word-Makrorekorder?pid=160743#pid160743

Du könntest damit folgende Aktionen aufzeichnen:

Mappingdatei öffnen
Mappingspalten komplett markieren
Markierung kopieren
in Datendatei wechseln
in AA1 einfügen

Anschließend könntest Du Daniels Code ausführen.

Anzeige
AW: VBA Suchen und Ersetzen
03.12.2025 12:02:04
addi
Ich habe es hinbekommen - vielen Dank euch allen!!
VG addi
AW: VBA Suchen und Ersetzen
02.12.2025 14:54:26
daniel
klar, ist alles möglich.
wenn man mehrere Dateien verwendet, sollte man die Zellbezüge (Range, Cells, Columns, Rows) immer vollständig referenzieren, also nicht nur Range (Zellbereich) sondern:
Workbooks(Dateiname).Sheets(Blattname).Range(Zelladresse)

für die Datei, die das Makro enthält, kann man dann statt Workbooks(Dateiname) auch einfach ThisWorkbook verwenden.
dann muss man den Code nicht anpassen, wenn man die Datei unter einem anderen Namen speichert.

Beachte, dass du in VBA nur mit geöffneten Dateien arbeiten kannst. Dh die Mappingtabelle müsste geöffnet werden, aber das kann auch im Makro passieren (Workbooks.Open)

Anzeige
AW: VBA Suchen und Ersetzen
02.12.2025 16:06:30
addi
Vielen Dank für Deine Hilfe!!
Ich werde das mal versuchen!!
Viele Grüße
addi
AW: VBA Suchen und Ersetzen
02.12.2025 19:35:40
schauan
Beachte, dass du in VBA nur mit geöffneten Dateien arbeiten kannst. Dh die Mappingtabelle müsste geöffnet werden, aber das kann auch im Makro passieren (Workbooks.Open)

nö. Man kann in VBA auch ohne Workbooks.Open mit anderen Dateien arbeiten. Siehe
https://www.clever-excel-forum.de/Thread-Eingegebene-Daten-in-seperate-Excel-Datei-uebertragen-und-speichern?pid=162754#pid162754
bzw. dort 2 Beiträge weiter, da ist ein Code zum Schreiben in eine "geschlossene" Datei.

Es ist natürlich einfacher, die Datei zu öffnen ;-)

hier wäre mal ein interessanter Beitrag wo PQ die Mapping-Arbeit abnimmt ;-)
https://community.fabric.microsoft.com/t5/Power-Query/Using-a-mapping-table-to-replace-multiple-values-in-multiple/td-p/776898
Anzeige
AW: VBA Suchen und Ersetzen
02.12.2025 19:52:08
daniel
1. kannst du uns erklären, was da passiert so dass wir es auch programmieren können, ohne den Code vollständig abschreiben zu müssen?
würdest du das auch tun oder würdest du da gerne drauf verzichten? (ich vermute letzeres)

2. du hast das "geschlossen" in Anführungszeichen gesetzt. Warum?
wird die Datei vielleicht doch intern geöffnet um das auszuführen?
Anzeige
AW: VBA Suchen und Ersetzen
02.12.2025 21:58:44
schauan
1)
Der code ist eigentlich, wie ich es oft mache, reichlich kommentiert und verständlich.
Wie das Quellblatt heißt, die Zieldatei, das Zielblatt usw. steht alles da.
Wo die Quelldaten herkommen und hinkommen, auch, Die Bereiche sind dabei gleich groß.
Damit das funktioniert, brauchst Du im Prinzip auch alles und kannst nichts weglassen. Du kannst natürlich Namen, Bereiche usw. anpassen.
Mehr dazu siehe z.B. dort
https://www.online-excel.de/excel/singsel_vbaf837.html
2)
hab ich ja im verlinkten Beitrag geschrieben. Es gibt immer wieder Diskussionen, ob eine Datei dabei geschlossen ist oder nicht. Aus meiner Sicht ist sie, ich wiederhole mich, bei der Operation geschlossen, aber in Zugriff. Man kann dabei ja mal spielen, wenn z.B. mehrere Daten aus einer Datei holen wollen oder alternativ schreiben wollen usw.

Anzeige
AW: VBA Suchen und Ersetzen
03.12.2025 00:38:20
daniel
Ist die frage, ob eine Datei geöffnet oder geschlossen ist, eine Frage der persönlichen Sichtweise?
AW: VBA Suchen und Ersetzen
03.12.2025 09:20:09
schauan
aus meiner Sicht - sicher nicht
(und auch der Peter schreibt das nicht)
Zitat:
Um auf eine Mappe zugreifen zu können, brauche ich ihren kompletten Pfad - in unserem Fall verweisen wir auf die gleiche Mappe.
In den nächsten zwei Schritten wird die Verbindung zu ADODB mit unserer Mappe hergestellt.

Ich kann im Code an vielen Ecken
den Begriff conn(ect) entdecken
connect, was hier verbinden heißt
auch wenn man sich in' Hintern beißt
das ist was anderes als open
es steht auch nicht im Reiter droben
connect tut hier den Zugriff binden
manch einer mag das anders finden
denn ihm gelingt das Öffnen nicht
weshalb er dann von "Offen" spricht

Spaß beiseite - es geht doch eigentlich nur um die Alternative zur Aussage "Beachte, dass du in VBA nur mit geöffneten Dateien arbeiten kannst. Dh die Mappingtabelle müsste geöffnet werden, aber das kann auch im Makro passieren (Workbooks.Open)"

Dabei müsste man schauen, worauf es bei der Aufgabe ankommt und wie man das löst. Man könnte die Mapping-Daten per ADO direkt in ein Array einlesen, die Quelldaten ebenso, den Abgleich dann zwischen den Arrays führen, und das geänderte Quelldaten-Array zurückschreiben.
Eventuell wäre Dein Ansatz mit Replace, aber auf Basis eines per ADO eingelesenen Mapping-Arrays, die schnellere Variante. Ob man da einen zeitlichen Unterschied bemerkt, hängt dann von der Anzahl der Daten ab.
Eventuell könnte man übrigens die Mappingtabelle auch als csv speichern und die Daten sowohl per Öffnen, Importieren oder ADO verfügbar machen ... :-)


Anzeige
AW: VBA Suchen und Ersetzen
02.12.2025 13:55:02
daniel
du könntest das ganze auch ohne VBA lösen.

1. erstelle wieder die Liste mit alt/neu in den Spalten AA und AB (Spalte AA: alte Nummer, Spalte AB: neue nummer
2. füge nach der Spalte H eine zusätzliche Spalte ein und fülle sie mit dieser Formel ab Zeile 2 (zeile 1 ist überschrift)
=XVerweis(H2;AA:AA;AB:AB;H2;0;1)

Arbeite dann mit dieser Spalte. Sie enthält die korrgierte Numme, wenn die Nummer nicht in der Änderungsliste auftaucht, wird die ursprüngliche Nummer aus Spalte H eingesetzt.
die Liste in AA:AB kannst du dann bei bedarf erweitern.

sollte es Performanceprobleme geben (Datei reagiert auf jede Eingabe träge mit langen berechnungzeiten) dann:
- sortiere die Liste AA:AB nach der ersten Spalte aufsteigend
- ändere im XVerweis den letzten Parameter von 1 auf 2.
Damit wird dann die Suchen in sortieren Listen angewendet und die ist wesentlich schneller als die Suche in unsortierten Listen.

Gruß Daniel
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige