Wert aus allen existenten Tabellenblättern auslesen
Moderator: Moderatoren
Wert aus allen existenten Tabellenblättern auslesen
Ich habe in einem Calc-Dokument eine (sich ändernde) Menge an Tabellenblättern, in denen jeweils eine Zelle einen Durchschnittswert aus einer Blattspalte listet. Jetzt will ich ein neues Blatt erzeugen, das automatisch die Namen aller aktuell existenten Tabellenblätter und daneben die zugehörigen Zellwerte listet. Wie mache ich das am schlauesten?
Vielen Dank schon mal,
Marino
Vielen Dank schon mal,
Marino
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Wert aus allen existenten Tabellenblättern auslesen
Willkommen im Forum.
Mit der folgenden benutzerdefinierten Funktion erhälst Du die Blattnamen der aktuellen Calc-Datei (die FUNCTION muss deshalb in einer STANDARD Bibliothek Deiner OOo Installation oder innerhalb des benutzenden Dokuments stehen):
Selektiere untereinander (!) eine ausreichend grosse Zellenanzahl und schreibe dann =MTRANS(ALLETABELLENNAMEN())&T(ZUFALLSZAHL()) in die oberste Zelle, schliesse das mit STRG+UMSCHALT+EINGABETASTE ab (das ergibt eine Matrixformel).
Nun werden die Blattnamen untereinander angezeigt - und automatisch beim Einfügen/Löschen von Blättern aktualisiert.
Auf die kannst Du per Formel zugreifen, #NV zeigt nicht vorhandene an.
Hilft Dir das weiter?
Mit der folgenden benutzerdefinierten Funktion erhälst Du die Blattnamen der aktuellen Calc-Datei (die FUNCTION muss deshalb in einer STANDARD Bibliothek Deiner OOo Installation oder innerhalb des benutzenden Dokuments stehen):
Code: Alles auswählen
Function alleTabellenNamen()
alleTabellenNamen = ThisComponent.getSheets().getElementNames()
End Function
Selektiere untereinander (!) eine ausreichend grosse Zellenanzahl und schreibe dann =MTRANS(ALLETABELLENNAMEN())&T(ZUFALLSZAHL()) in die oberste Zelle, schliesse das mit STRG+UMSCHALT+EINGABETASTE ab (das ergibt eine Matrixformel).
Nun werden die Blattnamen untereinander angezeigt - und automatisch beim Einfügen/Löschen von Blättern aktualisiert.
Auf die kannst Du per Formel zugreifen, #NV zeigt nicht vorhandene an.
Hilft Dir das weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Wert aus allen existenten Tabellenblättern auslesen
Hallo marino,
wenn du etwas über die Namenslogik der auszulesenden Tabellen sagst könnte man da vielleicht mit Formeln etwas erreichen.
Sonst müsste man wohl erst per Makro die Tabellennamen ermitteln .........
wenn du etwas über die Namenslogik der auszulesenden Tabellen sagst könnte man da vielleicht mit Formeln etwas erreichen.
Sonst müsste man wohl erst per Makro die Tabellennamen ermitteln .........
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Wert aus allen existenten Tabellenblättern auslesen
@Winfried
Das mit der Funktion klappt prima. Ich weiss nur nicht, wie ich dann die Namen der Blätter in Formeln übernehmen kann. Wenn da also steht:
Blatt23
Wie kann ich dann z.B. in der Zelle daneben 'Blatt23'.K2 ausgeben - und das dann per Fill auf alle Zeilen mit den anderen Blätternamen darunter übernehmen?
Besten Gruß,
Marino
Das mit der Funktion klappt prima. Ich weiss nur nicht, wie ich dann die Namen der Blätter in Formeln übernehmen kann. Wenn da also steht:
Blatt23
Wie kann ich dann z.B. in der Zelle daneben 'Blatt23'.K2 ausgeben - und das dann per Fill auf alle Zeilen mit den anderen Blätternamen darunter übernehmen?
Besten Gruß,
Marino
Re: Wert aus allen existenten Tabellenblättern auslesen
Hallo marino,
mit INDIREKT() baust du den TabellenNamen zB aus C5 in die Formel ein und ergänzt in Textform mit der "ZellAdresse"
=INDIREKT(C5&".F1")
@Komma4
kannst du bitte kurz erklären wie das mit der ZUFALLSZAHL() funktioniert?
mit INDIREKT() baust du den TabellenNamen zB aus C5 in die Formel ein und ergänzt in Textform mit der "ZellAdresse"
=INDIREKT(C5&".F1")
@Komma4
kannst du bitte kurz erklären wie das mit der ZUFALLSZAHL() funktioniert?
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Wert aus allen existenten Tabellenblättern auslesen
Also irgendwas mache ich doch falsch. In der Matrix erscheint nur #NAME? ... Ich habe die Formel so eingegeben: als Macro unter Standard im Doc selbst. Das Modul heisst nun selbst ALLETABELLENNAMEN.
Was mache ich falsch?
Was mache ich falsch?
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Wert aus allen existenten Tabellenblättern auslesen
@marino:
Der Code muss als FUNCTION in einer STANDARD Bibliothek (der betreffenden CALC-Datei oder Deiner OOo-Installation) stehen.
Der Name des Moduls sollte unerheblich sein... allerdings gab es mal einen Fehler, dass Code nicht mehr lief, wenn das Modul wie eine SUB hiess...
Hier funktioniert die Funktion aus MODUL1 der STANDARD Bibliothek meines Testdokuments.
Kommst Du damit weiter?
@clag
Die Funktion
Der Code muss als FUNCTION in einer STANDARD Bibliothek (der betreffenden CALC-Datei oder Deiner OOo-Installation) stehen.
Der Name des Moduls sollte unerheblich sein... allerdings gab es mal einen Fehler, dass Code nicht mehr lief, wenn das Modul wie eine SUB hiess...
Hier funktioniert die Funktion aus MODUL1 der STANDARD Bibliothek meines Testdokuments.
Kommst Du damit weiter?
@clag
Die Funktion
. Die Funktion T "wandelt einen Wert in einen Text" um. Der "Text der Zufallszahl" ist leer, erzwingt aber die Neuberechnung der Matrix.F1 OOo Online Hilfe hat geschrieben:können Sie sich eine Zufallszahl aus dem Bereich 0 bis 1 erzeugen lassen
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Wert aus allen existenten Tabellenblättern auslesen
Hallo komma4,
zuerst war da bei mir das "ah ja , also sozusagen ein F9" !
aber kurz darauf kam die Frage auf, "wieso ist das nötig" es wird doch sowieso immer die Tabelle neu berechnet wenn etwas geändert wird
Dann habe ich diesen Versuch "=MTRANS(allSheetName())" mit der nackten Function gemacht,
und siehe da, es funktioniert auch ohne die erzwungene Aktualisierung durch ZUFALLSZAHL()!
Nun interessiert es mich doch sehr, habe ich etwas missverstanden oder ist der "&T(ZUFALLSZAHL()" Trick nur in speziellen Situationen nötig, oder stammt er eventuell aus früheren OOo Zeiten wo er zwingend war, oder wie ist das zu verstehen
edit:
habe gerade bemerkt die einfache Formel registriert zwar sofort das Einfügen einer neuen Tabelle,
nicht aber das Umbenennen einer Tabelle, dafür ist erst ein ctrl+shift+F9 nötig .. hm ?
zuerst war da bei mir das "ah ja , also sozusagen ein F9" !
aber kurz darauf kam die Frage auf, "wieso ist das nötig" es wird doch sowieso immer die Tabelle neu berechnet wenn etwas geändert wird
Dann habe ich diesen Versuch "=MTRANS(allSheetName())" mit der nackten Function gemacht,
und siehe da, es funktioniert auch ohne die erzwungene Aktualisierung durch ZUFALLSZAHL()!
Nun interessiert es mich doch sehr, habe ich etwas missverstanden oder ist der "&T(ZUFALLSZAHL()" Trick nur in speziellen Situationen nötig, oder stammt er eventuell aus früheren OOo Zeiten wo er zwingend war, oder wie ist das zu verstehen

edit:
habe gerade bemerkt die einfache Formel registriert zwar sofort das Einfügen einer neuen Tabelle,
nicht aber das Umbenennen einer Tabelle, dafür ist erst ein ctrl+shift+F9 nötig .. hm ?
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: Wert aus allen existenten Tabellenblättern auslesen
Also, das funktioniert bei mir nicht.
Ich bin Oo-Anfänger.
Wie genau gebe ich denn die Function ein? Nicht via Tools / Macros / Organize Macros / OpenOffice.org Basic ..?
In der Zelle steht dann: {=mtrans(ALLETABELLENNAMEN())&T(zufallszahl())}, aber
es erzeugt immer ein #Name?
Marino
Ich bin Oo-Anfänger.
Wie genau gebe ich denn die Function ein? Nicht via Tools / Macros / Organize Macros / OpenOffice.org Basic ..?
In der Zelle steht dann: {=mtrans(ALLETABELLENNAMEN())&T(zufallszahl())}, aber
es erzeugt immer ein #Name?
Marino
Re: Wert aus allen existenten Tabellenblättern auslesen
Kann das sein, dass es daran liegt, dass ich eine engl. Portable-Version benutze?
MTRANS existiert dort gar nicht
und ZUFALLSZAHL natürlich auch nicht.
Letzteres dürfte RAND sein, aber was ist MTRANS im Engl.?
Gruß,
Marino
MTRANS existiert dort gar nicht
und ZUFALLSZAHL natürlich auch nicht.
Letzteres dürfte RAND sein, aber was ist MTRANS im Engl.?
Gruß,
Marino
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Wert aus allen existenten Tabellenblättern auslesen
AHA!marino hat geschrieben:Nicht via Tools / Macros / Organize Macros / OpenOffice.org Basic ..?
In der Zelle steht dann: {=mtrans(ALLETABELLENNAMEN())&T(zufallszahl())}
Du benutzt eine englischsprachige OOo-Version!
Dann musst Du auch die englischen FORMELN für Calc nehmen:
MTRANS = TRANSPOSE
ZUFALLSZAHL = RAND
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Wert aus allen existenten Tabellenblättern auslesen
Hallo Mr.Human.
ich habe dir mal eine Beispieldatei erstellt
ich habe dir mal eine Beispieldatei erstellt
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox