Hallo Jürgen,
eine ganz hübsche Funktion, aber doch sehr speziell, ich glaube eher
nicht, dass man sie allgemein braucht.
Und ich habe ein paar Kritikpunkte:
Der Name TRENNEN ist irreführend, Trennen würde wie bei der verwendeten
Basic-Funktion split und auch bei dem von dir genannten Menüpunkt Daten
-> Text in Spalten einen Vektor oder Array mit den einzelnen
Bestandteilen des Texts liefern. Deine Funktion würde ich eher als
"herauspicken" oder "herausgreifen" verstehen, sie liefert ja nur einen
der Bestandteile entsprechend dem vorgegebenen Index.
Die Zeile {If c < i Then TRENNEN = ""} ist, so wie sie dasteht, sinnlos,
weil du den Rückgabewert TRENNEN im nächsten Schritt schon wieder
überschreibst. Damit die Abfrage einen Sinn hat, müsste sie umformuliert
werden:
If c > i Then
TRENNEN = ""
exit function
end if
Dein Makro funktioniert nur trotzdem richtig, weil Basic bei einer
Anforderung eines Array-Elements mit Index außerhalb der Grenzen sowieso
einen leeren String liefert. Probiere das mal aus: setze die genannte
Zeile in Kommentar.
Insofern könntest du auf die Zeile sogar verzichten, wenn du darauf
vertraust, dass Basic auch weiterhin in deinem Sinn reagiert. AUf der
sicheren Seite bist du allerdings mit dem obigen Vierzeiler.
Die Speicherung in "Meine Makros" ist empfehlenswert, wenn zu erwarten
ist, dass man die Funktion nicht nur in einem Dokument braucht. Module1
ist allerdings nur der standardmäßig vorhandene Modul, die Funktionen
dort zu speichern, mag ausreichend sein, wenn man nur ganz wenig
allgemeingültige Makros hat, die sofort zur Verfügung stehen müssen,
aber bei größerem Umfang ist es wohl sinnvoll, die Makros auf mehrere
sachbezogene Module aufzuteilen.
Die Bibliothek Standard hat ja die Besonderheit, dass sie beim Start von
LibO automatisch geladen wird, andere müssen erst durch irgendeinen
Befehl geladen werden. Daher legt man da alle Makros ab, die schon zur
Verfügung stehen müssen, ohne dass irgendwo ein Makro gelaufen ist. Ich
habe da zum Beispiel ein Makro abgelegt, das weitere Bibliotheken lädt,
die ich ohne jede sonstige Aktion zur Verfügung haben möchte, weil ich
mit Tastaturkürzeln auf die Makros in diesen Bibliotheken zugreife. Was
da sonst alles noch an Verwendungen möglich ist, weiß ich auch nicht,
aber ich denke, dass es eventuell hilfreich ist, wenn man die
Calc-Funktionen in eine anderen Modul packt als die Makros, die eine
ganz andere Funktion haben.
Gruß
Gerhard
Am 30.08.2019 um 00:45 schrieb Jürgen Kirsten:
Hallo zusammen,
ich möchte euch von einer neuen Calc Funktion berichten, die es leider noch nicht offiziell gibt,
die es aber meiner Meinung nach braucht. Daher habe ich sie gemacht!
Ich habe mich mir folgendem Problem auseinandergesetzt: Es gibt in Calc die Funktion Verbinden.
Aber ein entgegengesetztes Trennen gab es bislang nicht. Ich hatte folgendes Problem. Eine
verbundene Zeichenkette (mit Semikolon oder Komma getrennt) lag vor und musste wieder auseinander
genommen werden. Dafür gab es bislang zwei Möglichkeiten. Zum einen die Menü-Option bei [Daten]
„Text in Spalten“. Oder eine sehr umständliche Formel die ich im Netzt irgendwo gefunden habe. Geht
mit Wechseln und Suchen und so.
Ich habe jetzt eine relativ einfache Funktion geschrieben, die es ermöglicht eine Zeichenkette
wieder aufzuTRENNEN.
Ich habe sie TRENNEN genannt und wenn ihr möchtet stelle ich sie euch vor:
So sieht ein Beispiel aus: =TRENNEN(„A; B; 1; X; ?; k; 345“; “; „; 7) = 345
Die Funktion brauch zunächst mal den Textstring der durch Semikolons, Leerzeichen, Kommas, o.ä.
getrennt ist. In dem Beispiel habe ich es direkt in die Formel geschrieben. Es kann aber auch ein
Bezug zu einer Zelle verwendet werden. Dann muss bekannt gemacht werden, wie die Trennung der Daten
erfolgt ist. Also ein Semikolon oder ein Semikolon mit anschließendem Leerzeichen oder sonstwie.
Und dann möchte die Funktion noch wissen, den wievielten Eintrag man herausfiltern möchte. Also in
dem Beispiel oben den 7ten. Normaler Weise löst man dies auf mit Zeile() oder Spalte(), um alle
Einträge aus einem String nebeneinander oder unter einander aufzulisten. Wenn ihr einen Teil
rausfiltern möchtet, den es gar nicht gibt, dann wird kein Fehler ausgegeben sondern eine leere
Zeichenkette. Den Fehler würde man ja doch nur mit Wennfehler wieder unkenntlich machen.
Ihr könnt die Funktion ganz einfach selbst verwenden, wenn ihr den folgenden Code im Basic Editor
wie folgt abspeichert. Ihr müsst wie folgt vorgehen: [Extras] [Makros] [Makros verwalten]
[LibreOffice Basic] Dann links [Meine Makros] [Standard] [Module1] wählen und [Bearbeiten] klicken.
Dort dann folgenden Code eingeben und [Speichern] klicken.
Function TRENNEN(a, b, c)
On Error GoTo Errorhandler
i = UBound(Split(a, b)) + 1
If c > i Then TRENNEN = ""
TRENNEN = Split(a, b)(c-1)
Errorhandler:
End Function
Die Funktion steht euch anschließend in allen euren Calc Arbeitsmappen auf eurem Rechner zu
Verfügung.
Viel Spaß!
Jürgen Kirsten
Für Fragen oder Anregungen stehe ich gerne zu Verfügung.
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.