it-swarm.com.de

Gibt es eine Google Sheets-Formel, um den Namen des Arbeitsblatts in eine Zelle einzufügen?

Die folgende Abbildung sollte helfen:

 enter image description here

11
orschiro

Sie haben zwei Möglichkeiten, und ich bin nicht sicher, ob ich ein Fan von ihnen bin, aber das ist meine Meinung. Sie können sich anders fühlen:

Option 1: Erzwinge die Ausführung der Funktion.

Eine Funktion in einer Zelle wird nur ausgeführt, wenn sie auf eine geänderte Zelle verweist. Das Ändern eines Blattnamens löst keine Funktionen in der Tabelle aus. Wir können die Funktion jedoch erzwingen, indem sie einen Bereich an sie übergeben. Wenn sich ein Element in diesem Bereich ändert, wird die Funktion ausgelöst.

Mit dem folgenden Skript können Sie eine benutzerdefinierte Funktion erstellen, die den Namen abruft:

function mySheetName() {
  var key = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
  return key;
}

und in der Zelle platzieren Sie Folgendes:

=mySheetName(A1:Z)

Wenn sich nun ein Wert in einer Zelle in diesem übergebenen Bereich ändert, wird das Skript ausgeführt. Dies dauert eine Sekunde, um das Skript auszuführen und setzt bei jeder Änderung eines Werts eine Meldung in der Zelle, sodass dies sehr schnell störend wirken kann. Wie bereits erwähnt, ist auch eine Änderung des Bereichs erforderlich, damit er ausgelöst wird. Dies ist bei einer ziemlich statischen Datei nicht wirklich hilfreich.

Option 2: Verwenden Sie das OnChange-Ereignis

Die Laufzeit fühlt sich zwar besser an als die obige Option, und dies hängt nicht von einem Wert ab, der sich in den Zellen der Tabellenkalkulation ändert, aber ich mag das nicht, weil er zwingt, wo der Name hingeht. Sie können ein Dienstprogrammblatt verwenden, um diesen Ort in verschiedenen Tabellenblättern zu definieren, wenn Sie dies wünschen. Nachfolgend finden Sie die Grundidee, die Ihnen vielleicht hilft, wenn Sie diese Option mögen.

Das OnChange-Ereignis wird ausgelöst, wenn der Blattname geändert wird. Sie können den folgenden Code verfeinern, um auf Fehler zu prüfen, die Blatt-ID nur für ein bestimmtes Blatt prüfen usw. Der grundlegende Code lautet jedoch:

function setSheetName(e) {
  var key = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
  SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('K1').setValue(key);
}

Nachdem Sie den Code gespeichert haben, setzen Sie im Skripteditor den On Change-Auslöser des aktuellen Projekts auf diese Funktion. Bei jedem Änderungsereignis wird der Blattname in die Zelle K1 geschrieben. Um den Auslöser einzustellen, wählen Sie Aktuelles Projekt Auslöser im Menü Bearbeiten .

7
Karl_S

Folgendes habe ich für Google Sheets gefunden:

Um den aktuellen Blattnamen in Google Sheets zu erhalten, kann das folgende einfache Skript Ihnen helfen, ohne den Namen manuell einzugeben. Gehen Sie dazu wie folgt vor:

  1. Klicken Sie auf Werkzeuge> Skripteditor

  2. Kopieren Sie den folgenden Skriptcode in das geöffnete Projektfenster und fügen Sie ihn in das leere Code-Fenster ein. Siehe Screenshot:

............................

function sheetName() {
  return SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
}

Speichern Sie dann das Codefenster, und kehren Sie zu dem Blatt zurück, dessen Namen Sie erhalten möchten. Geben Sie dann die folgende Formel ein: =sheetname() in einer Zelle und drücken Sie die Eingabetaste. Der Blattname wird sofort angezeigt.

Siehe diesen Link mit zusätzlichen Screenshots: https://www.extendoffice.com/documents/Excel/5222-google-sheets-get-list-of-sheets.html

3

Ich habe ein Blatt, das von anderen Benutzern verwendet wird, und ich habe einige indirekte () Verweise in der Nähe. Ich muss also einen geänderten Tabulatornamen formell behandeln.

Ich habe die Formel von JohnP2 (unten) verwendet, hatte jedoch Probleme, da sie nicht automatisch aktualisiert wurde, wenn ein Blattname geändert wurde. Sie müssen zur aktuellen Formel gehen, eine beliebige Änderung vornehmen und aktualisieren, um sie erneut auszuführen.

=REGEXREPLACE(CELL("address",'SHEET NAME'!A1),"'?([^']+)'?!.*","$1")

Ich habe dieses Problem gelöst, indem ich die Informationen aus this solution zum Erzwingen der Aktualisierung einer Funktion verwendet habe. Es ist zwar nicht die eleganteste Lösung, aber Sheets muss diese Zelle aufmerksam beobachten und regelmäßig aktualisieren, sodass ein aktualisierter Blatttitel angezeigt wird.

=IF(TODAY()=TODAY(), REGEXREPLACE(CELL("address",'SHEET NAME'!A1),"'?([^']+)'?!.*","$1"), "")

Auf diese Weise können Sheets diese Zelle jedes Mal aktualisieren, wenn Sie eine Änderung vornehmen. Dies führt dazu, dass die Adresse aktualisiert wird, wenn sie von einem Benutzer umbenannt wird.

1
Luke Allpress

Ein alter Thread, aber ein nützlicher. Hier ist ein zusätzlicher Code.

Als Antwort auf die Behauptung von Craig, der Regex sei zu gierig und versage bei Blattnamen mit einem einfachen Anführungszeichen, sollte dies der Trick sein (ersetzen Sie 'SHEETNAME'! A1 durch Ihren eigenen Blatt- und Zellbezug):

=IF(TODAY()=TODAY(), SUBSTITUTE(REGEXREPLACE(CELL("address",'SHEETNAME'!A1),"'?(.+?)'?!\$.*","$1"),"''","'", ""), "")

Es wird ein Lazy Match (das ". +?") Verwendet, um eine Zeichenfolge (einschließlich Anführungszeichen) zu finden, die von Anführungszeichen eingeschlossen sein kann oder nicht, aber definitiv mit einem Paukenschlag ("! $") Gefolgt von einer beliebigen Anzahl von Zeichen abgeschlossen wird . Google Sheets schützt Squotes innerhalb eines Sheet-Namens, indem ein weiteres Squote (wie in '') angehängt wird. Daher wird das SUBSTITUTE benötigt, um diese zurück zu einzelnen Squotes zu reduzieren.

Die Formel lässt auch Blattnamen zu, die Pony ("!") Enthalten, schlägt jedoch bei Namen mit Pony-Dollar ("! $") Fehl. Wenn Sie Ihre Blattnamen wirklich so gestalten müssen, dass sie wie vollständige absolute Zellreferenzen aussehen, geben Sie a ein Trennzeichen zwischen dem Knall und dem Dollar (wie ein Leerzeichen).

Beachten Sie, dass nur korrekt funktioniert, wenn Sie auf ein anderes Blatt zeigen als das, auf dem sich die Formel befindet! Dies liegt daran, dass CELL ("address" bei Verwendung auf demselben Blatt nur den Zellbezug (nicht den Blattnamen) zurückgibt. Wenn Sie ein Blatt benötigen, um seinen eigenen Namen anzuzeigen, platzieren Sie die Formel in einer Zelle auf einem anderen Blatt, und zeigen Sie darauf In meinen Arbeitsmappen befindet sich häufig ein "Meta" -Blatt, in dem Einstellungen, allgemeine Werte, Kriterien für die Datenbankübereinstimmung usw. gespeichert sind.

Wie bereits mehrfach erwähnt, werden in Google Sheets Änderungen am Namen des Arbeitsblatts nur festgestellt, wenn Sie die Neuberechnung der Arbeitsmappe auf "Bei Änderung und jede Minute" setzen, die Sie im Menü "Datei | Einstellungen | Berechnung" finden. Es kann bis zu einer Minute dauern, bis das Wechselgeld abgeholt wird.


Zweitens, wenn Sie wie ich zufällig eine interoperable Formel benötigen, die sowohl auf Google Sheets als auch in Excel funktioniert (die zumindest in älteren Versionen nicht über die REGEXREPLACE-Funktion verfügt), versuchen Sie Folgendes:

=IF(IFERROR(INFO("release"), 0)=0, IF(TODAY()=TODAY(), SUBSTITUTE(REGEXREPLACE(CELL("address",'SHEETNAME'!A1),"'?(.+?)'?!\$.*","$1"),"''","'", ""), ""), MID(CELL("filename",'SHEETNAME'!A1),FIND("]",CELL("filename",'SHEETNAME'!A1))+1,255))

Dies verwendet INFO ("release"), um zu bestimmen, auf welcher Plattform wir uns befinden ... Excel gibt eine Zahl> 0 zurück, während Google Sheets die INFO-Funktion nicht implementiert und einen Fehler generiert, den die Formel in eine 0 aufnimmt und für den numerischen Vergleich verwendet. Der Google-Code-Zweig ist wie oben.

Der Übersichtlichkeit und Vollständigkeit halber handelt es sich hierbei um die Nur-Excel-Version (die funktioniert den Namen des Blattes, auf dem sie sich befindet, korrekt zurückgibt):

=MID(CELL("filename",'SHEETNAME'!A1),FIND("]",CELL("filename",'SHEETNAME'!A1))+1,255)

Es sucht in der Ausgabe von CELL nach dem Dateinamen-Abschlusszeichen "]" ("Dateiname") und extrahiert den Blattnamen mit der MID-Funktion aus dem verbleibenden Teil der Zeichenfolge. Excel lässt nicht zu, dass Blattnamen "]" enthalten, damit dies funktioniert Für alle möglichen Blattnamen: In der interoperablen Version wird Excel gerne an die nicht vorhandene REGEXREPLACE-Funktion weitergeleitet, da sie den Google-Code-Zweig nie ausführen kann.

1
Angeltek

Wenn Sie das Blatt von einem anderen Blatt referenzieren, können Sie den Blattnamen mit der Funktion CELL erhalten. Sie können dann Regex verwenden, um den Blattnamen zu extrahieren.

=REGEXREPLACE(CELL("address",'SHEET NAME'!A1),"'?([^']+)'?!.*","$1")
1
JohnP2

Ich habe dies endlich in einer halbautomatischen Weise ohne die Verwendung von Skripten zu arbeiten ... aber es braucht 3 Zellen, um es abzurufen. Ausgehend von früheren Antworten beginne ich mit einer Zelle, die nur = NOW () enthält, um die Uhrzeit anzuzeigen. Zum Beispiel werden wir dies in Zelle A1 einfügen ...

=NOW()

Diese Funktion wird jede Minute automatisch aktualisiert. Fügen Sie in der nächsten Zelle eine Zeigerformel ein, wobei Sie den Namen des Blattes verwenden, um auf die vorherige Zelle zu verweisen. Zum Beispiel werden wir dies in A2 setzen ...

='Sheet Name'!A1

Abgesehen von der Zellenformatierung sollten die Zellen A1 und A2 an dieser Stelle den gleichen Inhalt anzeigen, nämlich die aktuelle Uhrzeit.

Und die letzte Zelle ist der Teil, den ich aus früheren Lösungen mit einem regulären Ausdruck entlehne, um die Formel aus der zweiten Zelle zu ziehen und dann den Namen des Blatts aus der Formel zu entfernen. Zum Beispiel werden wir dies in Zelle A3 setzen ...

=REGEXREPLACE(FORMULATEXT(A2),"='?([^']+)'?!.*","$1")

Zu diesem Zeitpunkt sollte der in A3 angezeigte resultierende Wert der Name des Blatts sein.

Nach meiner Erfahrung wird die Formel in A2 sofort aktualisiert, sobald der Name des Arbeitsblatts geändert wird. Dies reicht jedoch nicht aus, um die Aktualisierung von A3 auszulösen. Aber jede Minute, in der Zelle A1 die Zeit neu berechnet, wird das Ergebnis der Formel in Zelle A2 anschließend aktualisiert, und dies wiederum veranlasst A3, mit dem neuen Blattnamen aktualisiert zu werden. Es ist keine kompakte Lösung ... aber es scheint zu funktionieren.

0
Craig

Hier ist mein Vorschlag für ein Skript, das den Namen des Blattes von seiner Position in der Blattliste in Parameter zurückgibt. Wenn kein Parameter angegeben wird, wird der aktuelle Blattname zurückgegeben.

function sheetName(idx) {
  if (!idx)
    return SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
  else {
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    var idx = parseInt(idx);
    if (isNaN(idx) || idx < 1 || sheets.length < idx)
      throw "Invalid parameter (it should be a number from 0 to "+sheets.length+")";
    return sheets[idx-1].getName();
  }
}

Sie können es dann in einer Zelle wie jeder Funktion verwenden

=sheetName() // display current sheet name
=sheetName(1) // display first sheet name
=sheetName(5) // display 5th sheet name

Wie in anderen Antworten beschrieben, müssen Sie diesen Code in ein Skript einfügen mit:

Tools > Script editor
0
Nicolas Janel