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)"
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