Daten anderer Tabellen kopieren (Google Tabellen Script)

Daten anderer Tabellen kopieren (Google Tabellen Script)

In diesem Tutorial zeige ich Euch wie Ihr mit der Google Tabellen Script-Programmierung Daten von mehreren Tabellen kopieren könnt. Über einen Button könnt Ihr das dann entsprechend immer gleich wieder aktualisieren. Falls Ihr andere Namen für die einzelnen Tabellenblätter benutzen solltet könnt Ihr das natürlich entsprechend anpassen. Statt Tabellenblatt1 gebt Ihr einfach den Namen ein der Eurem Tabellenblatt entspricht.



Im Bereich wo getLastRow()+2 steht werden zwischen den Daten Leerzeilen eingefügt. Wollt Ihr dazwischen keine Leerzeilen haben reicht es aus wenn Ihr nur +1 eingebt.
Falls Ihr die Daten dann auch später noch sortieren wollt könnt Ihr die letzte Zeile sheet1.sort(1) auskommentieren. Dafür müsst Ihr nur die zwei // entfernen.

Hier das Script zum Kopieren von Daten aus anderen Tabellen mit Google Tabellen Script:

Die Benutzung des Scripts geschieht wie immer auf eigene Gefahr 😉

Euch gefällt die Datei und Ihr wollt Euch unbedingt bedanken?
Hier ist meine AMAZON – Wunschliste [HIER KLICKEN] 😉

 

Das entsprechende Video-Tutorial mit der Anleitung findet Ihr hier:

 



Das könnte Dich auch interessieren

14 Kommentare

  1. Meik sagt:

    Hey 🙂

    Schöne Tutorials und gut erklärt.
    Danke dafür!

    Hat sehr geholfen 🙂

    • Meik sagt:

      Ach eine Frage noch.
      Kann man vielleicht auch sagen, dass er nur den nackten Text kopieren und einfügen soll und keine Formeln?
      Das bereitet mir aktuell noch Probleme und ich finde in den Script-Hilfen noch nichts passendes 🙁
      Cih habe iene Formel, die mitkopiert wird, diese bezieht sich dann aber nicht mehr auf das original Tabellenblatt und schmeisst daher einen Fehler raus. am einfachsten wäre natürlich, wenn er direkt nur als Text/Zahl kopiert und einfügt.
      Hat das schon mal jemand gemacht?

    • Chris sagt:

      Gern geschehen und ich danke Dir Meik für das positive Feedback 😉

  2. Julia sagt:

    Hey Chris,

    dein Script war schonmal sehr hilfreich (zumal ich leider noch nicht scripten kann) aber ein Anliegen habe ich.
    Ich habe im Tabellenblatt1 sehr viele Zeilen mit verschiedenen Status und Bearbeitern. Jetzt müsste das Script erkennen ob der Bearbeiter bspw. Max UND Status (per Drop-Down auswählbar) „in Bearbeitung“, „DD-Versand“ ODER „zur Abrechnung“ ist und es mir dann in das Tabellenblatt „Max“ kopieren.

    Wäre super wenn du mir da helfen könntest!

    • Chris sagt:

      Hi Julia,
      kommt natürlich darauf an wie Du das ganze aufbauen willst. Es gibt sicher mehrere Möglichkeiten das umzusetzen. Man könnte von der Startseite eine Auswahlliste (Drop-Down) der Mitarbeiter nehmen und daneben einen Button wo man dann rauf klickt und dann das Script ausgeführt wird. Oder man hat den Button in der jeweiligen Seite des Mitarbeiters und hier wird nur der Tabellenname ausgelesen und ebenfalls das Script über den Tabellennamen ausgeführt. Hier sparst Du Dir sozusagen die Auswahl über das Auswahlfeld weil der Name ja schon im Tabellennamen enthalten ist.
      Anschließend wird die Übersichtsliste (wo für jeden Mitarbeiter der Status über das Drop-Down-Feld vorhanden ist) eingelesen. Hier beispielsweise 2 Spalten (NAME, STATUS) beim Durchlaufen des Arrays was Du ausgelesen hast kannst Du dann mit einer IF Abfrage die Bedingungen festlegen wann kopiert werden soll (NAME des Mitarbeiters, „in Bearbeitung“, „DD-Versand“ ODER „zur Abrechnung“). Innerhalb des IF Bereichs wird dann das ganze kopiert und vorher eventuell der Bereich gelöscht oder nur hinten angehangen mit einem Zeitstempel.
      Ein Tutorial welches vieles von dem zeigt was Du benötigst steckt hier:
      https://toptorials.com/zellen-vergleichen-markieren-array-google-tabellen-script/

      • Julia sagt:

        Hi Chris,

        nachdem ich lange rumprobiert habe, komme ich auf folgendes:

        function RZscript(){

        var sheet2=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(„Tim“);
        sheet2.clear(); // Tabellenblatt Tim leeren
        var sheet1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(„Projektstatus 2″);

        var startzeile=2; //Zeile ab der gesucht werden soll
        var endzeile=sheet1.getLastRow(); //Spalte in der die Suche beendet wird

        // Name nachdem gesucht werden soll

        var Name=“Tim“;

        // Spaltenindex festlegen in dem nach dem Namen gesucht werden soll

        var suchSpaltenIndexN=5;

        //Projekte holen in denen der Name übereinstimmt

        var projekteN=sheet1.getRange(startzeile, suchSpaltenIndexN , endzeile, 1).getValues();

        // Status nachdenen gesucht werden soll

        var Status=sheet1.getRange(„O2:O4″);

        // Spaltenindex festlegen in dem nach dem Status gesucht werden soll
        var suchSpaltenIndexS=“7“;

        //Projekte holen in denen der Status übereinstimmt
        var projekteS=sheet1.getRange(startzeile, suchSpaltenIndexS , endzeile , 1).getValues();

        // Ziel festlegen
        var Zielzeile=sheet2.getRange(1,1);

        if(projekteN==Name); {
        if(projekteS==Status); {
        sheet1.getRange(startzeile,endzeile).copyTo(Zielzeile);
        }
        }

        }

        ——————-
        Es ist komplett debuggt, dennoch tut sich nichts beim ausführen.
        Die Zeile mit dem copyTo bereitet mir Kopfzerbrechen, da ich nicht weiß wie ich angeben soll dass ich NUR die Zeilen möchte in denen beide Bedingungen zutreffen.

        Danke für den Hinweis auf dein anderes Tutorial!

        • Chris sagt:

          Ich glaube der Fehler liegt beim Status.
          var Status=sheet1.getRange(„O2:O4″);
          und
          if(projekteS==Status); {
          Ich würde erst einmal alles weg Kommentieren was mit dem Status zu tun hat um zu sehen ob das bis dahin funktioniert. Bei Projekte und Status vergleichst Du anscheinend zwei Arrays. Hier musst Du vermutlich dann noch eine verschachtelte Schleife einbauen um die beiden Arrays mit einander zu vergleichen. Ich habe gerade nochmal geschaut aber eine sogenannte InArray Funktion habe ich bei Google Script jetzt nicht gesehen. Also bleiben Dir nur die Schleifen.
          Eine Möglichkeit dafür sieht dann in etwa so aus:
          https://stackoverflow.com/questions/41379965/google-apps-script-find-a-value-in-an-array
          Der Rest sieht, für mich ok aus auch wenn Du diese If Abfrage kombinieren könntest. Aber es geht ja auch so und ist manchmal übersichtlicher 😉

  3. Alfred Bublik sagt:

    Hi Chris.

    kann man den Befehl getlastrow eingrenzen, so das er z.b.erst ab spalte 10 die letzte reihe sucht.

    lg

    • Chris sagt:

      Das könntest Du über eine IF Abfrage machen. Das sieht dann in etwa so aus:

      function getLastRowExtended(){
      var ss=SpreadsheetApp.getActiveSpreadsheet();
      var lastRow=ss.getLastRow();
      var lastRowExtended;
      var firstRowToSearch=10; // Erste Zeile ab der gestartet werden soll.

      lastRowExtended=lastRow;
      if(lastRow< =firstRowToSearch) lastRowExtended=firstRowToSearch; ss.getRange("F1").setValue(lastRowExtended); }

  4. Michael sagt:

    Hallo zusammen, ich habe dazu auch mal eine frage

    in Tabellenblatt 1 werden laufend Werte eingetragen, gelöscht und überschrieben etc.
    Ich hätte daher gerne zu jedem Eintrag der gemacht wird, in Tabellenblatt2, eine Kopie.

    Sodass ich in Tabelle 2 quasi eine Endlosliste erhalte, von allen Einträgen die in Tabelle 1 gemacht wurden.

    Ist das möglich und wenn ja wie? bin was Script und/oder Macros angeht nicht wirklich fit 🙂

    Wäre nice wenn Du mir da einen Tipp geben kannst.

    VG
    Michael

  5. Patrick Böttcher-Exner sagt:

    Hallo Chris,

    Wäre es möglich dieses Script auch auf unterschiedliche Tabellen auszubreiten? Also Tabellenblatt1 von Tabelle a + Tabellenblatt1 von Tabelle b + Tabellenblatt1 von Tabelle c, etc… Ich müsste wahrscheinlich mit Importrange erst einmal auf die anderen Tabellen zugreifen, aber wo würde ich das einbinden ?

    LG und Danke

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.