Text innerhalb der Zelle wechseln / austauschen (Google Tabellen)
In diesem Tutorial zeige ich Euch wie Ihr mit GOOGLE TABELLEN innerhalb von der Zelle Text auswechseln also austauschen könnt.
Wer das erste mal mit Google Tabellen oder überhaupt mit einem Tabellenkalkulationsprogramm arbeitet sollte sich vielleicht auch erst einmal dieses Tutorial anschauen:
Einfache Berechnungen für Anfänger (Google Tabellen)
Das Tutorial zeigt ganz einfache Berechnungen und sollte den Einstieg wesentlich leichter machen.
Dieses Tutorial ist extra für Anfänger die sich mit dem Tabellenkalkulationsprogramm GOOGLE TABELLEN / SPREADSHEETS noch nicht so viel beschäftigt haben. Es zeigt die Funktionen und Möglichkeiten Schritt für Schritt.
Das Video-Tutorial "Text innerhalb der Zelle wechseln / austauschen (Google Tabellen)"
Das könnte Dich auch interessieren
- Textinhalt vergleichen & markieren (Google Tabellen / Spreadsheets) Script
- Tutorials über Google Tabellen Script - Programmierung
- INDIREKT und VERKETTEN ganz einfach (Google Tabellen)
- Übersichts-Liste der Google Tabellen Tutorials
- Text verketten / verbinden (Google Tabellen)
- Zellen benennen / Mit Namen rechnen (Google Tabellen)
- Verknüpfungen / Zellen verknüpfen (Google Tabellen)
- Teil eines Textes innerhalb der Zelle ersetzen (Google Tabellen)
- Tutorials über Google Tabellen
19 Comments
hi chris, mein unersätlicher wissensdurst gepaart mit der unfähigkeit eine lösung zu finden treibt mich wieder mal zu dir.
hab 2 probleme die indirekt im zusammenhang stehen.
1. suchen und ersetzen per skript.
wollte mir mittels makro editor die funktion suchen und ersetzen aufzeichnen. leider zeichnet er die befehle nicht auf.
ich muss in meinem arbeitsblatt diverse texte unformatieren. sind etwa 40 verschiedene eingaben. wäre natürlich cool wenn man diese 40 vorgänge in einen skript unterbringen kann. mit dem befehl "wechsel" sollte das normal möglich sein.
z.b. schaut dieser text "w1v *norm *i2 68% +2" nachher so aus "2i 68 +2"
das weiaus wichtigere problem ist aber ein copy problem
ich möchte die felder v6:an37 nach B6:t37 kopieren. dabei dürfen aber felder in denen schon werte stehen nicht überschrieben werden.
geht sowas überhaupt?
welche befehle würden da überhaupt in frage kommen.
ein kleines dankeschön für deine bemühungen ist unterwegs
gruß alfred
Danke Dir alfred, das Dankeschön ist schon angekommen 😉
Beim kopieren wirst Du bei dem was Du vorhast um ein Script wohl nicht herum kommen. Hier brauchst Du zwei verschachtelte Schleifen. Im Zielbereich muss dann jede Zelle im ausgewählten Spalten- / Zeilenbereich durchlaufen werden. Hier wird dann vor dem Einfügen geprüft ob Inhalt vorhanden ist oder nicht. Wenn die Zelle leer ist wird der Inhalt eingefügt.
Ein Beispiel für so eine doppelte For Schleife siehst Du hier:
https://toptorials.com/for-schleife-google-tabellen-script/
Besser und schneller als die Zellen einzeln zu durchlaufen wäre es das in ein Array einzulesen und zu verarbeiten. Ein Beispiel für die Vorgehensweise bei einem Array siehst Du hier:
https://developers.google.com/apps-script/articles/removing_duplicates
Bei dem ersten Teil habe ich allerdings nicht ganz verstanden wie das gemeint war. Was wolltest Du mit Wechsel bewirken. Schreib mal bitte exakt auf wie sich der Eintrag ändern sollte.
(„w1v *norm *i2 68% +2“ nachher so aus „2i 68 +2“) Sollte es so am Ende aussehen oder kam das als fehlerhafter Eintrag zurück. Ich weiß ja nicht genau was Du anschließend vor hast.
Das mit der Schleife schaue ich mir dann selbst noch mal genauer an. Ich muss das erst einmal selbst testen. Da musst Du allerdings 1-2 Tage Geduld haben. Bei den Temperaturen und dem Fulltimejob ist gerade die Luft voll raus.
Viele Grüße und ein großes Dankeschön nochmal 😉
Chris
der eintrag kommt so richtig zurück. ich mach das halt über mehrere schritte
1.suche nach w1v ersetzen durch nichts
2. suche nach * ersetzen durch nichts
3. suchen nach % ersetzen durch nichts
4. suchen nach i2 ersetzen durch 2i
5…usw….
und weil ich da sehr vieles umtauschen oder löschen muss wäre da ein skript mehr als hilfreich.
vor allem weil von zeit zu zeit (daher das kopier problem) neue einträge dazukommen….duie dann wieder umformatiert werden müssen.
schade ist echt das der makro rekorder da nix aufzeichnet was ich mit den board eigenen menü bei bearbeien / suche und ersetzen mache
Hi Alfred, ich kämpfe mich gerade ein wenig durch. Das dauert etwas länger als erwartet. Deshalb verschiebe ich das auf das Wochenende. Momentan bin ich am Auslesen des Arrays aus dem Bereich. Das Ausführen aus einer Funktion heraus (was ich eigentlich vor hatte) funktionierte nicht so wie ich das wollte. Jetzt schreibe ich das so um das Quelle und Ziel in einer Zelle angegeben werden können. Da es aber länger dauert, kann ich nicht jeden Tag so viel Zeit damit verbringen. Ich hoffe Du verstehst dass. Momentan (außer der Hitze und dem Fulltime Job) habe ich extrem viel zu tun. Falls Du mal Lust hast, kannst Du ja mal auf meinen eigentlichen neuen Hauptkanal vorbei schauen.
C4D4U aber unbedingt die Lautstärke etwas reduzieren da das Intro sehr laut ist.
Hier siehst Du auch (extrem viele Kommentare) warum ich keine Zeit mehr habe auf YouTube neue Tutorials hochzuladen.
Viele Grüße
Chris
mach ich. und bei mir eilt das nie. manchmal brauch ich nur ein denkanstoss um vielleicht selber eine lösung zu basteln. aber aufgrund der hitze auch nicht soviel vorm rechner.
wobei ich sagen muss, das mit den array übersteigt meine bescheidenen kentnisse schon etwas.
das copy problem hab ich bereits übergangen. kann da viel mit der "wenndann sonst" formel direkt in der zelle machen.
nur das suchen und ersetzen bereitet mir noch kopf zerbrechen.
kann man in der eingabemaske vom board eigenen suchen und ersetzen mehrere werte angeben? z.b. durch ein semikolon getrennt
gruß
Hallo Alfred,
ich habe ein kleines Script geschrieben welches Daten aus einem Bereich in den anderen Bereich kopieren kann ohne schon vorhandene beschriebene Zellen zu überschreiben. Also werden nur Werte in die Zellen kopiert die leer sind.
Hier das Script:
function bereichKopieren(){
var sheet = SpreadsheetApp.getActiveSheet();
// Quell-, Ziel- und Ergebnisbereich
var quelle="I2"; // Zelle die den Bereich der neuen einzulesenden Daten enthält
var ziel="J2"; // Zelle die den Bereich der schon vorhandenen Daten enthält
var ergebnis="K2" // Hier wird angezeigt wie viele neue Werte eingetragen wurden.
var quellBereich =sheet.getRange(quelle).getValue();
var zielBereich =sheet.getRange(ziel).getValue();
// Quell- und Zielbereich als Array einlesen
var quellBereichDaten = sheet.getRange(quellBereich).getValues();
var zielBereichDaten = sheet.getRange(zielBereich).getValues();
var counterNeu=0;
for(i in zielBereichDaten){
for(j in zielBereichDaten[i]){
// Hier die Prüfung ob ein Wert vorhanden ist.
if(zielBereichDaten[i][j]!=""){
quellBereichDaten[i][j]=zielBereichDaten[i][j];
}else{
counterNeu++;
}
}
}
// Leeren des Zielbereichs und Eintragen aller Werte in den Zielbereich
sheet.getRange(zielBereich).clear().setValues(quellBereichDaten);
// Ausgeben der Informationen (Zeilen, Spalten, Anzahl neuer Einträge)
sheet.getRange(ergebnis).setValue("Zeilen:"+zielBereichDaten.length+" / Spalten:"+zielBereichDaten[0].length+" / Neu:"+counterNeu);
}
Die Bereiche kannst Du alle anpassen und Im Script entsprechend ändern. In dem Bild siehst Du als Ergebnis bei Neu eine 0. Das hängt damit zusammen das ich das Script zweimal ausgeführt habe. Beim ersten Mal habe ich einige Einser im Zielbereich gelöscht um Leerzellen zu haben und es wurden dann aus dem Quellbereich die Werte korrekt in den Zielbereich übernommen. Beim zweiten Ausführen gab es dann keine Leerzellen mehr, deshalb die 0.
Teste das Script aber erst einmal in einer anderen Tabelle bevor du loslegst. Wichtig ist auch das der Quell und Zielbereich die gleiche Größe haben sonst kommt es zu Fehlern.
Mit besten Grüßen
Chris
wäre es eine hilfe wenn dass suchen und ersetzen problem nur auf eine spalte anzuwenden wäre?
du hast mir früher mal beim auslesen des tabelennamens (bzw. nach dem suchen eines wortes inerhalb des tabellenblattnamen) geholfen.
auszug des codes:
var re=("GK+");
var regExp=new RegExp(re);
if(!tabellenBlattName.match(regExp))
continue;
könnte man ähnliches auf das suchen und ersetzen problem anwenden?
gruß alfred
Hallo Alfred,
bei "Suchen und ersetzen" machst Du ein Häkchen bei "Suche mithilfe regulärer Ausdrücke".
Die Groß-Kleinschreibung wird automatisch mit aktiviert und kann auch so bleiben falls Du die Groß und
Kleinschreibung unterschiedlich behandeln möchtest.
Mit regulären Ausdrücken hast Du enorm viele Möglichkeiten. Das Thema an sich ist aber auch sehr komplex.
Google Script verwendet hierzu die Syntax nach RE2. Mehr Infos über die Infos erhältst Du hier:
RE2 bei Wikipedia
RE2 Syntax bei GitHub
Falls es sich auch um Formeln handeln sollte die Du anpassen möchtest, musst Du noch einen Haken bei "Auch in Formeln suchen" machen.
Bei den regulären Ausdrücken bedeutet | soviel wie "oder".
Beim Suchen könntest Du folgendes im Suchenbereich eingeben:
w1v|\*|%
Damit wird alles gefunden entweder w1v, * oder %
Der Bereich "Ersetzen durch" würde dann leer sein. Damit werden genau
diese Einträge dann gefunden und gelöscht.
Beim Ersetzen von i2 zu 2i benötigtst Du auch nur den Eintrag im Suchenbereich:
i2
Im Ersetzen Bereich steht dann:
2i
Damit wird dann i2 durch 2i ersetzt. Daran denken das es bei Formeln nur funktioniert wenn "Auch in Formeln Suchen" aktiviert wurde.
Du kannst sogar Teile der Suche im Bereich "Ersetzen durch" mit ausgeben. Hierfür werden die Bereiche die gesucht werden in Klammern gesetzt.
Jedes Ergebnis der Klammer kann dann ausgegeben werden. Diese werden durch $1 für die erste Klammer $2 für die zweite Klammer ausgegeben.
Nehmen wir ein einfaches Beispiel. Hast Du in mehreren Zellen zwei Zahlen oder Buchstaben, kannst Du diese einfach umdrehen.
Wenn bei "Suchen" folgendes eingegeben wird:
^(.)(.)$
kannst Du im Ersetzen durch dann $2$1 eintragen um die beiden Einträge umzukehren.
Du kannst auch nur $1 für den ersten Wert oder $2 für den zweiten Wert angeben falls Du nur das ausgeben möchtest.
Das ^ Zeichen bedeutet Anfang und $ bedeutet Ende und genau dazwischen die beiden Punkte die angeben das ein beliebiges Zeichen benutzt werden kann (also z.B. Buchstaben oder Zahlen)
Soweit mir bekannt ist, kannst Du zwar über die regulären Ausdrücke verschiedenste Einträge herausfiltern aber für eine ODER Bedingung innerhalb des Ausdrucks keine unterschiedlichen Ergebnisse wie bei einer WENN Funktion zurückliefern. Außer natürlich die Ergebnisse aus den gerade beschriebenen Klammern mit $1 etc. Zumindest habe ich das noch nicht entdeckt 😉
Viele Grüße
Chris
hi….
musste erst mal paar tage lang das testen und mich einarbeiten.
also dieses ( w1v|\*|% ) ist genial. hab mir in einer zelle bereits mehr als 50 verschiedene suchkriterien zusammengestellt, diese werden innerhalb einer sekunde alle gellöscht. da werden in einer arbeitsmappe schon mal mehr als 1500 löschvorgänge gemacht.
pinpos1|pinpos2|pinpos3|pinpos4|pinpos5|w1vvr|w1vrr|w1hrr|w1hhr|w1hhl|w1hll|w1vll|w1vvl|w2vvr|w2vrr|w2hrr|w2hhr|w2hhl|w2hll|w2vll|w2vvl|w3vvr|w3vrr|w3hrr|w3hhr|w3hl|w3hll|w3vll|w3vvl|w1rv|w1rh|w1lh|w1lv|w2rv|w2rh|w2lh|w2lv|w3rv|w3rh|w3lh|w3lv|w1v|w1l|w1h|w1r|w2v|w2l|w2h|w2r|w3v|w3l|w3h|w3r|\*|% sind meine suchkriterien
nun zu dem hier. ( ^(.)(.)$ ). das kann man ja bedingt zum mehrfach suchen und ersetzen benutzen. jedenfalls im meinen fall eine geniale funktion das mich etwas gefuxt hat.. lag daran das manchmal die erste und der letzte zeichenkette gar nicht oder nur teilweise gefunden wurde.
in dem fall:
^(1)(w)|(2)(w)|(3)(w)|(4)(w)|(5)(w)$
wurde 1w und 5w nicht immer gefunden. habs dann lösen können indem ich nicht vorhandene zeichenketten vorne und hinten anhänge:
^(0)(w)|(1)(w)|(2)(w)|(3)(w)|(4)(w)|(5)(w)|(6)(w)$
ersetzen tu ich dann so:
$2$1$4$3$6$5$8$7$10$9$12$11$14$13
geht auch mit wörtern. eine suchen und ersetzen zeile schaut so aus:
suchen:
^(p)(o)(w)|(d)(r)(a)(w)(h)|(f)(a)(d)(e)(h)|(s)(k)(y)|(t)(i)(e)(f)|(p)(u)(n)(c)(h)|(p)(i)(t)(c)(h)|(d)(r)(a)(w)|(f)(a)(d)(e)|(h)(o)(c)(h)|(f)(l)(o)(p)|(b)(a)(c)(k)|(n)(o)(r)(m)|(x)(y)$
ersetzen:
*$1$2$3$4$5$6$7$8$9$10$11$12$13$14$15$16$17$18$19$20$21$22$23$24$25$26$27$28$29$30$31$32$33$34$35$36$37$38$39$40$41$42$43$44$45$46$47$48$49$50$51$52$53$54$55$56
so bleiben aus etwa gefühlt 100 arbeitschritten nur noch etwa 10 übrig.
danke nochmals.
das mehrfach suchen und ersetzen scheint nicht zu gehen. die einzigsten lösungen die ich im netz gefunden habe sind skripte die auf tabellen zurückgreifen. da steht dann in ai der alte wert und in b1 der neue wert. a2 der alte, b2 der neue….usw
Lg Alfred und alles gute
Hi Alfred,
das sieht ja ziemlich komplex aus und wie ich sehe eine ganze Menge "Oder" Anweisungen 😉
Die Zeichen ^ bezieht sich auf den Anfang und $ auf das Ende. Das heißt das erste Zeichen in der Zelle muss dann das Zeichen nach dem ^ sein. Das gleiche für das $ Zeichen. Das heißt das Zeichen vor dem $ muss dann das letzte Zeichen in der Zelle sein. In dem Beispiel: ^..$ werden nur Zellen gefunden wo es genau zwei Zeichen gibt. ^a bedeutet der erste Buchstabe muss ein a sein. a$ bedeutet das der letzte Buchstabe ein a sein muss.
Das Thema ist noch wesentlich komplexer. Du kannst in geschweiften Klammern festlegen wie viele vorhanden sein müssen {1,3} also 1-3 von den Zeichen, mit + muss mindestens eins oder mehr vorhanden sein und mit * keins oder mehrere. Mit ? entweder eins oder keins. Schau Dir ruhig noch mal das hier an:
https://github.com/google/re2/blob/master/doc/syntax.txt
Der Hammer was damit alles möglich ist 😉
Viele Grüße
Chris
Hallo Chris, hallo zusammen,
ich suche einen einfachen Code, der Text in einem Bereich ersetzt. Was per Funktion im Tabellenblatt einwandfrei funktioniert, bekomme ich mit einem Skript nicht hin. Das ist aber das Ziel.
Also, suche im Bereich D3:H100 überall die Zeichenkette "Haus" und mache daraus "Katze".
Wenn dann in E5 "Dies ist ein Haus" steht, soll da dann "Dies ist ein Katze" stehen.
Für eine Zelle ist das kein Problem, aber für einen Bereich bekomme ich es nicht hin. Oder muss man das dann mit einer Schleife lösen?
Problem ist also, ihm mitzugeben, dass er einen gesamten Bereich nehmen soll.
Danke für Eure Antwort!
Hallo Eckhard,
ein kleines Tutorial für das Ersetzen über die Google Script Programmierung habe ich gerade erstellt.
Text ersetzen mit Google Tabellen Script (Snippet)
Ein Beispiel wie Du die Zellen suchen kannst siehst Du hier:
Textinhalt vergleichen & markieren (Google Tabellen / Spreadsheets) Script
Bei den gefundenen Zellen musst Du dann den Code entsprechend noch (wie oben beschrieben) etwas anpassen.
Viele Grüße
Chris
Danke wie immer für deine mega schnelle Antwort!
Muss ich mir genauer angucken. Diese Aufgabenstellung scheint nicht so einfach zu sein wie in Excel/VBA.
Dein Code scheint immer die gesamte Zeile abzufragen. Es fällt mir schwer, den anzupassen.
Eine Zelle den Text zu ersetzen kann ich. Ich glaube, ich komm nicht umhin, Zelle für Zelle mit einer Schleife abzufragen.
Arrays kann ich leider noch nicht. Ich versuche mal weiterzukommen.
Danke auf jeden Fall!
Dies werde ich nun quasi mit zwei Schleifen (Zeile und Spalten) Zelle für Zelle machen:
sheet.getRange(1, 1).setValue(sheet.getRange(1, 1).getValues().toString().replace("M", ""));
Damit müsste ich zum Erfolg kommen. Ob das "ordentlich" ist weiss ich nicht. Ich hoffe, die Performance leidet nicht.
So, Chris, mit Deiner Hilfe habe ich es nun wie folgt gelöst:
function Suchen_Ersetzen() {
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Mathe01");
var Sucher = "Müll" // zu suchender Teil-String
var Txtneu = "" // neuer Teil-String
var Spalte =1 // Läufer für Spalten
var Zeile =1 // Läufer für Zeilen
while (Spalte <= 30){ //geht alle Spalten durch
while (Zeile -1) {
sheet.getRange(Zeile, Spalte).setValue(sheet.getRange(Zeile, Spalte).getValues().toString().replace(Sucher, Txtneu));
}
Zeile++;
}
Spalte++
var Zeile =1
;
}
}
Hallo Eckhard,
freut mich dass Du Dein Script fertig stellen konntest und Danke für Dein Feedback. Für die letzte beschriebene Spalte und Zeile kannst Du zum Beispiel auch getLastRow und getLastColumn verwenden falls Du das brauchst.
Schleifen kannst Du auch mit einer IF Anweisung und break beenden falls Du das mal benötigen solltest.
Viele Grüße
Chris
Je größer der Bereich wird den Du einlesen musst wirst Du ohne Arrays relativ schnell merken dass das Script immer langsamer wird.
Einlesen von Arrays wird dann nicht über getValue sondern getValues vorgenommen. Die Arrays kannst Du dann relativ schnell durchsuchen lassen und nur bei einem Treffer wird dann nochmals auf die Tabelle zugegriffen um die Werte zu ändern.
Ein sehr einfaches Beispiel für das Durchsuchen in einem Array siehst Du hier:
https://toptorials.com/zellen-vergleichen-markieren-array-google-tabellen-script/
Die Schleife ist zwar nicht verschachtelt aber das kannst Du dann in etwa so anpassen wie Du das mit Deinem jetzigen Script umgesetzt hast.
Viele Grüße
Chris
Ich habe gerade Dein Script gesehen und es freut mich dass Du es hinbekommen hast.
Das mit den Arrays solltest Du Dir allerdings, wenn Du Dich mehr mit der Programmierung beschäftigten wirst, auf jeden Fall anschauen. Je nach Anwendungsfall beschleunigt es das Ganze um ein Vielfaches.
Viele Grüße
Chris