Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1052to1056
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

Suchen und ersetzen ohne Neuanfang bei Zeile 1

Suchen und ersetzen ohne Neuanfang bei Zeile 1
03.03.2009 11:26:38
Stefan
Hallo liebes Froum,
ich habe eine Spalte mit Werten, ca. 200 Zeilen. Die Werte bestehen aus 3ziffrigen Zahlen (010,011,100,271...). Diese Zahlen sollen durch andere 3ziffrige Zahlen ersetzt werden (z.B. 010 durch 001, 011 durch 004, 100 durch 200, 271 durch 355,...). Nun habe ich das Problem, dass z.B. die Zahl 101 (Original) durch die 400 (Ersatz) ersetzt werden soll, die 400 aber später auch nochmal als Original auftritt und durch 708 ersetzt werden soll.
Ich kann also nicht die ganze Spalte immer von oben nach unten durchsuchen lassen, sondern darf die Spalte nur einmal durchlaufen und muss dann die Werte ersetzen.
Wie bekomme ich das denn hin?
Vielen Dank für Eure Hilfe.
Gruß
Stefan

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Von hinten nach vorne, sprich...
03.03.2009 11:35:58
Renee
Stefan,
An deinen Beispielen:
400 durch 708
271 durch 355
101 durch 400
100 durch 200
011 durch 004
010 durch 001
reine Logik, oder?
GreetZ Renée
AW: Von hinten nach vorne, sprich...
03.03.2009 12:03:07
Stefan
Hlalo Renée,
danke für die Antwort, allerdings habe ich dann das gleiche Problem, wenn ich z.B. die 700 durch 300 ersetze, die bereits vorher durch 715 ersetzt wurde, die dann wieder ersetzt werden soll.
Also nochmal übersichtlicher ;)
300 durch 715 ersetzt
700 durch 300 ersetzt
715 durch 138 ersetzt
Verallgemeinert: die Original sind numerisch sortiert, der Ersatz nicht. Das hatte ich in meinem ersten Post nicht gesagt. Sorry.
Gruß
Stefan
Anzeige
Wieder verkehrt rum...
03.03.2009 12:12:33
Renee
Hi Stefan,
Deine Reihenfolge ist wieder verkehrt.
Denn das müsste doch funktionieren:
715 durch 138
300 durch 715
700 durch 300
Wenn's Überschneidung gäbe, z.b. mit Zwischenschritt
715 durch 138
700 durch AAA
534 durch 700
644 durch BBB
100 durch 644
300 durch 715
AAA durch 300
BBB durch 100 etc.....
Ich glaub ich check's net...
Hab schon tausendmal solche Ersetzungen gemacht und bin praktisch immer ohne Mapping-Tabellen ausgekommen!
GreetZ Renée
AW: Wieder verkehrt rum...
03.03.2009 12:29:17
Stefan
Ich glaube, ich habe auch ein Verständnisproblem :)
Ich erklär mal mein Vorgehen, vielleicht wird es dann ersichtlich, was mein Problem ist.
Ich starte den Recorder, markiere die Spalte, in der ersetzt werden soll, suche dann einen Wert, z.B. 300, ersetze den durch 715, suche dann den Wert 700, ersetze den durch 300, suche dann den Originalwert 715 und ersetze den durch 138 z.B. Nun findet er aber nicht nur den Originalwert 715, sondern auch den schon ersetzten Wert 715, der dann nochmal geändert wird, was falsch ist.
Ich verstehe schon, dass ich eine andere Reihenfolge für das Ersetzen der Zahlen nehmen kann, allerdings sind es recht viele Ersetzungen und durch die nicht vorhandene Sortierung der Ersatzzahlen, ist das eher mühselig. Ich dachte halt, es gibt eine Möglichkeit, dass Zeile 1 bis 100 genau einmal durchgegangen wird und die Ersetzung auch nur einmal vorgenommen wird.
Gruß
Stefan
Anzeige
mit ner Hilfsspalte geht das einfach
03.03.2009 12:40:47
WF
Hi Stefan,
3-stellige Zahlen als '001 usw. in Spalte A eingegeben.
in B1 dann:
=INDEX({"001";"004";"400";"708"};VERGLEICH(A1;{"010";"011";"101";"400"};0))
- musst Du natürlich erweitern -
und runterkopieren
Salut WF
AW: Von hinten nach vorne, sprich...
03.03.2009 12:21:03
Josef
Hallo Stefan,
Renée hat grundsätzlich recht, das du nur die logische Reihenfolge einhalten musst.
Alternativ kann man das aber vauch so lösen.

Sub replaceNumbers()
  Dim rng As Range
  Dim varOrig() As Variant, varRep() As Variant
  Dim intIndex As Integer
  
  varOrig = Array(300, 700, 715) 'original
  varRep = Array(715, 300, 138) 'ersatz
  
  Set rng = Range("A1:A100")
  
  For intIndex = 0 To UBound(varRep)
    rng.Replace varOrig(intIndex), "#" & varRep(intIndex), xlWhole, xlByRows, False, False, False, False
  Next
  
  rng.Replace "#", "", xlPart, xlByRows, False, False, False, False
  
End Sub

Gruß Sepp

Anzeige
Genau so ...
03.03.2009 12:36:10
Renee
Sepp,
und damit schreibt der arme Stefan (bei 200 Zeilen)
2 x mindestens 100 3 stellige Zahlen (denn es sind ja ...recht viele Ersetzungen...)
und er hätte in der Zwischenzeit das ganze händisch 3 mal erledigen können ;-))
GreetZ Renée
AW: Genau so ...
03.03.2009 12:37:54
Josef
Hallo Renée,
irgendwo muss er die Zahlen ja definieren und die kann man ja auch aus einem Tabellenbereich auslesen.
Gruß Sepp

Das mein ich ja,
03.03.2009 12:44:15
Renee
Sepp,
Das ist überhaupt nicht gegen deinen Code oder deine Hilfe argumentiert!
Er hat irgendwo ein Blatt Papier mit VON ZU Zahlen.
Ich hätte mich hingesetzt und das Zeug direkt in den Zellen überschrieben. 200 Zeilen boah...
~ 30 Minuten = 10 Sekungen/Zeile....
GreetZ Renée
Anzeige
Ja das ist aber oft so, das
03.03.2009 12:47:19
Josef
Renée
Frager nach einer Lösung für ein Problem suchen und bis das ganze dann soweit ist, hätten sie es zu Fuß schon dreimal erledigt.
Wenn er das öfter braucht ist es ja ok, einmalig ist der Aufwand sicher zu hoch.
Gruß Sepp

AW: Genau so ...
03.03.2009 12:45:58
Stefan
Hallo nochmal,
vielen lieben Dank für den Code. Ich habe ihn ausprobiert, aber es ist nichts passiert. Ich habe die Original noch um ein paar Zahlen ergänzt und den Ersatz natürlich um ebensoviele ergänzt.
Es kommt auch keine Fehlermeldung. Es passert einfach nichts.
Und ja, ich muss natürlich viele Zahlen einmal schreiben, aber eben nur einmal :)
Anzeige
Sind die Zahlen in Spalte A ? (owT)
03.03.2009 12:48:04
Renee

AW: Sind die Zahlen in Spalte A ? (owT)
03.03.2009 12:52:39
Stefan
Oh Mann, bin echt zu blöd. Ne, es geht um Spalte I. Habe es angepasst und siehe da...pling alles ersetzt.
Gehe ich recht in der Annahme, dass die Zuordnung der Ersatzzahlen zu den Originalen über die Reihenfolge der Zahlen geschieht? Anders kann ich es mir nicht erklären, da ich von dem Code nur Bahnhof verstehe :)
Vielen Dank jedenfalls.
AW: Sind die Zahlen in Spalte A ? (owT)
03.03.2009 13:07:29
Josef
Hallo Stefan,
ja, in meinem Beispiel
varOrig = Array(300, 700, 715) 'original
varRep = Array(715, 300, 138) 'ersatz

wird 300 durch 715 ersetzt, 700 durch 300, usw.
Gruß Sepp

Anzeige
Wichtig NUR EINMAL laufe lassen!
03.03.2009 13:37:55
Renee
Hi Stefan,
Dir ist hoffentlich bewusst, dass du Sepp's Makro NUR EIN EINZIGES MAL laufen lassen darfst.
Natürlich müssen die Arrays vorher richtig angepasse sein!
Andernfalls richtes du Chaos an ;-))
Greetz Renée
AW: Wichtig NUR EINMAL laufe lassen!
03.03.2009 13:52:04
Stefan
Einmal reicht mir völlig :)
Danke für den Hinweis.
Gruß,
Stefan
AW: Von hinten nach vorne, sprich...
03.03.2009 12:23:04
fcs
Hallo Stefan,
dann muss du zunächst alle vorhandenen Nummern durch eine Hilfsnummer erstzen bevor du in einem 2. Lauf die Hilfsnummern durch die endgültigen Nummern ersetzt
Also z.B:
1. Lauf
300 durch 1300 ersetzt
700 durch 1700 ersetzt
715 durch 1715 ersetzt
2. Lauf
1300 durch 715 ersetzt
1700 durch 300 ersetzt
1715 durch 138 ersetzt
wobei auch dies nur funktioniert, wenn du immer den ganzen Zellinhalt ersetzt.
Gruß
Franz
P.S.
Ansonsten hilft nur eine per Makro generierte Ersetzung, die alle bereits erstzen Zeilen markiert und bei den weiteren Ersetzungen überspringt.
Gruß
Franz
Anzeige
AW: Von hinten nach vorne, sprich...
03.03.2009 12:54:41
Stefan
Danke dir auch Franz. Wäre auch eine praktikable Lösung gewesen. Bin ich nicht drauf gekommen.
Gruß
Stefan

336 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige