Eigene Funktionen in OpenOffice Calc

Stand: 2017-04-12
Autor: Wolfgang R. Schulz

1. Abstrakt

Die Tabellenkalkulation »OpenOffice Calc« bietet die Möglichkeit, eigene Funktionen zu definieren, die ebenso leicht wie die bereits fest eingebauten Funktionen verwendet wer­den können.

Dieses Dokument soll einen kurzen Abriss darüber geben, wie solche Funktionen definiert und verwendet werden können. Im Anhang finden sich einige Beispiele nützlicher Funk­tionen.

[Zurück zum Inhaltsverzeichnis]

2. Eigene Funktionen definieren

2.1. Wahl der Programmiersprache

In OpenOffice Calc stehen mehrere Skriptsprachen zur Verfügung, u.a. JavaScript, Python und BASIC. Am weitesten verbreitet ist wohl BASIC, weshalb dieses hier verwendet werden soll.

2.2. Speicherort festlegen

Eigene Funktionen gehören zu den Makros, und diese sind wiederum in Modulen organi­siert. Ein einzelnes Modul kann bis zu 64kB Programmtext aufnehmen, aber es ist mög­lich, umfangreicheren Code durch Aufteilen in mehrere Funktionen über mehrere Module zu verteilen.

Die Module wiederum können entweder unter »Meine Makros« abgelegt werden, wo sie künftig allen OO-Dokumenten zur Verfügung stehen, oder sie werden spezifisch an ein bestimmtes Dokument gebunden.

Anm.: Nachdem für ein Dokument erstmalig ein Makro erstellt wurde, muss das Doku­ment geschlossen, neu geöffnet und die Frage nach der Makro-Aktivierung bejaht werden, bevor die eigenen Funktionen in diesem Dokument funktionieren.

Das Erstellen der Funktion (des Makros) geschieht unter »Extras → Makros → Makros verwalten«. In der sich dann öffnenden Maske kann der Speicherort ausgewählt und – falls nötig bzw. erwünscht – ein neues Modul angelegt werden. Durch Klick auf »Bearbei­ten« gelangt man dann in den Makroeditor.

Anm.: Auf den Makroeditor selbst und die ihn umgebende IDE wird an dieser Stelle nicht weiter eingegangen, da das Prinzip anderen Entwicklungsumgebungen sehr ähnlich ist.

[Zurück zum Inhaltsverzeichnis]

2.3. Funktion erstellen

Nachdem der Makroeditor geöffnet ist, wird die Funktion wie aus herkömmlichen Program­miersprachen bekannt eingegeben. BASIC unterscheidet hier zwischen Prozeduren (»Sub«) und Funktionen (»Function«). Im Gegensatz zu Prozeduren können Funktionen einen Wert zurückgeben. Die Rückgabe erfolgt, indem der Wert dem Funktionsnamen zugewiesen wird. Beispiel:

Function APlusB( a as Integer, b as Integer )
  APlusB = a + b
End Function

[Zurück zum Inhaltsverzeichnis]

3. Eigene Funktionen aufrufen

Eine zuvor erstellte eigene Funktion wird in OpenOffice Calc aufgerufen wie eine bereits eingebaute, d.h. in das betreffende Feld wird z.B. =APlusB(2;3) eingetragen. Anstelle von Literalen können natürlich auch Zellenbezüge beim Aufruf der Funktion verwendet werden, also z.B.: =APlusB($A$1; B2)

Wichtig: Auch wenn die aufgerufene Funktion keine Parameter hat, muss beim Aufruf eine (leere) Klammer angegeben werden, weil Calc sonst nicht erkennt, dass es sich um einen Funktionsaufruf handelt, also z.B.: =meineFunktionOhneParameter()

[Zurück zum Inhaltsverzeichnis]

4. Anhang

4.1. summenTest

Diese Funktion verdeutlicht das Auswerten eines Zellbereichs als Aufrufparameter, also z.B.: =summenTest(A1:B5)

Function summenTest ( vArgument as Variant )
  ' Ist das Argument ein Array (Zellbereich)?
  If Not IsArray( vArgument ) Then
    ' Ist der einzelne Wert numerisch?
    If IsNumeric( vArgument ) Then
      ' Rückgabewert ist gleich Eingabewert.
      summenTest = vArgument
    Else
      ' Summe ist gleich 0, wenn kein numerischer Wert
      ' übergeben wurde.
      summenTest = 0
    End If
    ' Funktion beenden.
    Exit Function
  End If

  Dim nSumme as Long
  Dim i as Integer
  Dim j as Integer

  ' Der spätere Rückgabewert.
  nSumme = 0

  ' Schleife durch erste Dimension (Zeilen).
  For i = 1 to UBound( vArgument, 1 )
    ' Schleife durch zweite Dimension (Spalten).
    For j = 1 to UBound( vArgument, 2 )
      ' Numerisch?
      If IsNumeric( vArgument( i, j ) ) Then
        ' Wert dazuzählen.
        nSumme = nSumme + vArgument( i, j )
      End If
    Next j
  Next i

  ' Rückagbewert in Zelle.
  summenTest = nSumme
End Function

[Zurück zum Inhaltsverzeichnis]

4.2. Concat_Range

Diese Funktion fügt alle Zeichenketten innerhalb eines Zellenbereichs zu einem zusam­men und kann zum Beispiel in Kombination mit der vordefinierten Funktion LÄNGE dazu verwendet werden, um die Anzahl der Zeichen innerhalb eines Zellbereichs zu zählen: =LÄNGE(CONCAT_RANGE(A1:B5))

Function Concat_Range ( vArgument as Variant )
  ' Ist das Argument ein Array (Zellbereich)?
  If Not IsArray(vArgument) Then
    ' Rückgabewert ist gleich Eingabewert
    Concat_Range = vArgument
    ' Funktion beenden.
    Exit Function
  End If

  Dim rVal as String
  Dim i as Integer
  Dim j as Integer

  ' Der spätere Rückgabewert.
  rVal = ""

  ' Schleife durch erste Dimension (Zeilen).
  For i = 1 to UBound( vArgument, 1 )
    ' Schleife durch zweite Dimension (Spalten).
    For j = 1 to UBound( vArgument, 2 )
      ' Neuen String ans Ergebnis anhängen.
      rVal = rVal + vArgument( i, j )
    Next j
  Next i

  ' Rückagbewert in Zelle.
  Concat_Range = rVal
End Function

[Zurück zum Inhaltsverzeichnis]