Seite 1 von 1
Wert aus allen existenten Tabellenblättern auslesen
Verfasst: Do, 03.03.2011 11:21
von marino
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
Re: Wert aus allen existenten Tabellenblättern auslesen
Verfasst: Do, 03.03.2011 12:42
von komma4
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):
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?
Re: Wert aus allen existenten Tabellenblättern auslesen
Verfasst: Do, 03.03.2011 12:46
von clag
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 .........
Re: Wert aus allen existenten Tabellenblättern auslesen
Verfasst: Do, 03.03.2011 13:31
von marino
@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
Re: Wert aus allen existenten Tabellenblättern auslesen
Verfasst: Do, 03.03.2011 13:45
von clag
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?
Re: Wert aus allen existenten Tabellenblättern auslesen
Verfasst: Do, 03.03.2011 14:21
von marino
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?
Re: Wert aus allen existenten Tabellenblättern auslesen
Verfasst: Sa, 05.03.2011 03:14
von komma4
@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
F1 OOo Online Hilfe hat geschrieben:können Sie sich eine Zufallszahl aus dem Bereich 0 bis 1 erzeugen lassen
. Die Funktion T "wandelt einen Wert in einen Text" um. Der "Text der Zufallszahl" ist leer, erzwingt aber die Neuberechnung der Matrix.
Re: Wert aus allen existenten Tabellenblättern auslesen
Verfasst: So, 06.03.2011 09:04
von clag
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 ?
Re: Wert aus allen existenten Tabellenblättern auslesen
Verfasst: Mo, 07.03.2011 16:01
von marino
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
Re: Wert aus allen existenten Tabellenblättern auslesen
Verfasst: Mo, 07.03.2011 16:09
von marino
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
Re: Wert aus allen existenten Tabellenblättern auslesen
Verfasst: Mo, 07.03.2011 16:13
von komma4
marino hat geschrieben:Nicht via Tools / Macros / Organize Macros / OpenOffice.org Basic ..?
In der Zelle steht dann: {=mtrans(ALLETABELLENNAMEN())&T(zufallszahl())}
AHA!
Du benutzt eine englischsprachige OOo-Version!
Dann musst Du auch die englischen FORMELN für Calc nehmen:
MTRANS = TRANSPOSE
ZUFALLSZAHL = RAND
Re: Wert aus allen existenten Tabellenblättern auslesen
Verfasst: Di, 15.03.2011 11:58
von clag
Hallo Mr.Human.
ich habe dir mal eine Beispieldatei erstellt