Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Software>Einzelne Buchstaben in Excel ersetzen?

Einzelne Buchstaben in Excel ersetzen?

jogoto23.09.1408:51
Ich muss in einer Spalte einzelne Buchstaben ersetzen aber eben nur, wenn sie las einzelner Buchstaben vorkommen und nicht in einem Wort, also A soll euch B ersetzt werden aber nicht "Alt" durch "Blt".
0

Kommentare

Dayzd23.09.1409:15
Mit den Filtern von Excel dürftest du zumindest die einzelnen Buchstaben rausfiltern können . Stichwort "?".

Reguläre Expressionen unterstützt Excel so direkt leider nicht.

Ich glaube, wenn du dir viel Handarbeit ersparen möchtest, kommst du um VBA nicht herum... Falls die Zellen wirklich nur einen Buchstaben und nicht z.B. "A Text" enthalten, kannst du ganz einfach mit der Funktion Len() die Länge/Größe des Zellinhalts herausfinden(muss also 1 sein) und mit Replace() dann das Ersetzen durchführen.
0
jogoto23.09.1416:28
Interessanter Artikel, danke!
Vielleicht bekomme ich es ja im Ausschluss hin. Erscheint mir in meinem Fall allerdings etwas kompliziert.
Ich habe eine Spalte, in der Kriterien in Abkürzungen stehen. Diese Kriterien sollen alle in ausführliche Versionen geändert werden. Da gibt es A aber leider auch AB.
Ich habe mir zwischenzeitlich einen Umweg überlegt. Zuerst AB in §% ersetzen, dann kann ich die geänderten Daten nach A filtern. Wenn A ersetzt ist, kann ich §% wieder in was anderes ersetzen.

Wenn jemand noch was eleganteres einfällt, gerne.
0
HumpelDumpel
HumpelDumpel23.09.1417:00
Hast du mehr als 7 Abkürzungen?
0
HumpelDumpel
HumpelDumpel23.09.1417:10
2. Frage: Enthält die Datei nur Daten? Oder anders gefragt: Kannst du sie ohne Verluste als .csv abspeichern?
0
jogoto23.09.1417:31
Mehr als 7 Abkürzungen, so um die 20. CSV ist möglich. Ist ein Export aus Access.
0
Dayzd23.09.1417:38
jogoto
Da gibt es A aber leider auch AB.
Dann wären es z.B. folgende 2 Kriterien: 1) "A", 2) "<>??*"

2) heißt: <>: does not contain
?: Ein Zeichen
?*: mindestens 1 Zeichen oder mehrere.

Dies müsste also bedeuten, dass mit beiden Kriterien alle Zellen gefunden werden, die ein A enthalten aber nicht mehr als 2 Buchstaben haben.

Getestet habe ich das allerdings jetzt nicht.
0
gickel23.09.1417:50
Als CSV-Text sollte das keine zu großen Schwierigkeiten bereiten. Nisus dürfte das mit Suchen und Ersetzen können, wenn man die Zell-Separatoren dazu nimmt, oder?
0
HumpelDumpel
HumpelDumpel23.09.1417:51
jogoto
CSV ist möglich.
Na dann als .csv speichern in Texteditor öffnen Die Datensätze sind mit Semikolon getrennt ...;A;...
Einfach suchen und ersetzen ;A; ;Arschloch;
0
jogoto23.09.1417:55
Ich glaube beide Varianten gehen nicht, muss es aber natürlich noch testen.
Es können mehrere Kriterien in einem Feld stehen, also entweder nur A oder nur AB aber auch A,AB und das ist auch das zweite Problem, es wurde mit "," gearbeitet und kein Leerzeichen.
Aber wie gesagt, ich versuche erst mal beide Varianten, danke euch!
0
HumpelDumpel
HumpelDumpel23.09.1418:18
Kopier die Spalte in neue Datei dann .csv
Dann in Texteditor, der
entweder nach "Wort suchen" kann A Arschloch
oder RegEx kann \bA\b Arschloch
0
Dayzd23.09.1418:44
wenn du es als CSV exportieren kannst, könntest du auch folgendes machen:

Als Editor empfehle ich TextMate (kostenlos)
Dessen Suche beherrscht reguläre Ausdrücke. (Unter anderem Zeigt er dir auch die gefundenen Zeilen an und wie er sie ersetzen würde. Dafür einfach auf "Find All" klicken und wenn du das Textfeld von Replace auswählst, zeigt er dir in der gefundenen Liste an, wie er es ersetzen würde.)

1) Nun könntest du jeweils an Zeilenanfang folgendes hinzufügen: "Buchstabe;Ersetzendes Wort;". Dafür ganz einfach Als Suchtext "^" eingeben, als Replace-Text zB. "A;Abseits;", reguläre Ausdrücke aktivieren und Replace all klicken. ("^" steht für den Zeilenanfang)

2) Schritt:
- Suchtext: "^(\w);([^;]*);(([^;]*;){Spaltenzahl})([\w,]*)\1([\w,]*)"
Als Spaltenzahl, die Anzahl der Spalten zwischen "Abseits;" und dem Feld mit deinem Kriterien angeben.
z.B: Falls die Zeile lautet "A;Ersatz;23e 212 ; 230 fas;B,A,CD; qedlk; asd;aldj;" wäre die Spaltenzahl 2.

- Replace-Text: "$1;$2;$3$5$2$6"

3) Schritt: Nun müsstest du halt wieder deine nächste Abkürzung "eingeben", bzw. die alte ersetzen. Hier kannst du auch wieder reguläre ausdrücke verwenden:
Suchtext: ""^(\w);([^;]*)"
Replacetext: "B;Bundesland"


bei 20 Abkürzungen aber ziemlich viel Handarbeit... Da würde ich mir lieber ein Perlskript oder so basteln.


Noch kurz als Erklärung zu den Regulären Ausdrücken:
^: Zeilenanfang
\w: Buchstabe
[^;]: Jedes Zeichen ausser ";"
*: so oft sich das voranstehende "Zeichen" wiederholt.
(): Hiermit werden Gruppen erstellt, die im gleichen Ausdruck mit \Zahl aufgerufen werden können, oder über eine Variable $Zahl im Replace-Text. Dabei wird von links nach rechts und von aussen nach innen gezählt.

Alternativ könntest du auch einfach Schritt 1) weglassen und die Abkürzung gleich in den Suchtext setzen:
Suchtext: (([^;]*;){Spaltenzahl vor Kriterium})([\w,]*)A([\w,]*)
Replacetext: $1$3Abseits$4
0
HumpelDumpel
HumpelDumpel23.09.1419:03
Dayzd
bei 20 Abkürzungen aber ziemlich viel Handarbeit... Da würde ich mir lieber ein Perlskript oder so basteln.
Ich glaube, da bin ich mit meiner Methode schon fertig...
0
Dayzd23.09.1419:22
HumpelDumpel
Dayzd
bei 20 Abkürzungen aber ziemlich viel Handarbeit... Da würde ich mir lieber ein Perlskript oder so basteln.
Ich glaube, da bin ich mit meiner Methode schon fertig...
Stimmt, das \b hatte ich ganz vergessen. Dann darf allerdings in keiner anderen Spalte irgendwo ein einzelner Buchstabe stehn. Sonst müssen diese trotzdem irgendwie wie in meinem Beispiel durch abzählen ausgeschlossen werden.
Ich schreibe trotzdem lieber ein Skript, das ich vielleicht nochmal verwenden kann, als 10 Minuten search/replace zu spielen.

#!/usr/bin/perl

use warnings;
use strict;

open my $fh, '<', "input.csv" or die "error opening input.csv: $!";
my @file_content=<$fh>;
close($fh);

my @Abkuerzungen = ("A", "B", "C");
my @Volltext = ("Abseits", "Bundesland", "Clown");

foreach (@file_content) {
    for ($count = 0; $count <= $#Volltext; $count++) { $find = "\b$Abkuerzungen[$count]\b"; $replace = "$Volltext[$count]"; s/$find/$replace/; }
}
print  qq|$_;\n| for @file_content;

Das wäre spontan das was du gemacht hast, nur halt als Skript... Die Arrays sind ja schnell erstellt, wenn eine passende Liste vorhanden ist.
0
gvg23.09.1419:23
Ich weiß nicht, ob ich was überlesen habe, aber warum überprüfst Du denn nicht zuerst die Länge des Feldes? Wenn ein Feld die Länge 1 hat und A enthält, dann ersetze ...

=WENN(LÄNGE(A1)=1;WENN(A1="A";"B";A1);A1)

Ausprobiert in Excel, macht aus A ein B und lässt z.B. ALT unverändert.
0
HumpelDumpel
HumpelDumpel23.09.1419:46
gvg
Ich weiß nicht, ob ich was überlesen habe, aber warum überprüfst Du denn nicht zuerst die Länge des Feldes? Wenn ein Feld die Länge 1 hat und A enthält, dann ersetze ...

=WENN(LÄNGE(A1)=1;WENN(A1="A";"B";A1);A1)

Ausprobiert in Excel, macht aus A ein B und lässt z.B. ALT unverändert.
Man kann nur maximal 7 "WENN"s verschachteln - er hat aber 20 Abkürzungen, die zudem auch noch kombiniert (Komma getrennt) auftreten...
0
HumpelDumpel
HumpelDumpel23.09.1419:49
Dayzd
Ich schreibe trotzdem lieber ein Skript, das ich vielleicht nochmal verwenden kann, als 10 Minuten search/replace zu spielen.
Bis ich unter meinen Scripts das nach einem halben Jahr wiedergefunden habe, bin ich schon mindestens 2x fertig...
Aber jedem das Seine...
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.