Mittels einer Funktion (UDF) den Zähler oder Nenner einer Division zurückgeben
Vor Excel 2013 war es mit „Bordmitteln” nicht möglich, den Text einer Formel in einer Zelle auszugeben oder sonstwie auszuwerten. Für alle Versionen ist eine UDF hilfreich oder sogar vonnöten, wenn aus einer eingegebenen Divisions-Formel der Dividend und/oder der Divisor berechnet werden sollen. Im folgenden Code wird wegen der besseren Unterscheidung und auch kürzeren Schreibweise „Z” für „Zähler” und „N” für „Nenner” statt „Dividend” oder „Divisor„verwendet.
Hinweis: Diese Funktion ist darauf ausgelegt, dass ausschließlich die Division in der Zelle berechnet wird. Ist die eigentliche Division nur ein Teil der Gesamtformel, kann diese UDF kein korrektes Ergebnis bringen.
Die Funktion muss in einem allgemeinen Modul gespeichert werden, siehe auch hier. Der Aufruf erfolgt dann beispielsweise so: =DivisionsTeil(A1;"z")
wobei A1
die auszuwertende Zelle ist und "z"
für den Zähler, also den Dividenden steht. Die Groß- Kleinschreibung ist nicht relevant. – Hier nun der Code:
Option Explicit Function DivisionsTeil(c As Range, ZN As String) As Variant Dim Formel As String Dim SlashPos As Integer Dim Zahl As Variant Formel = c.FormulaLocal If Left(Formel, 1) <> "=" Then 'Dann wohl Text MsgBox "Die Zelle " & c.Address(0, 0) & " enthält keine Formel!" DivisionsTeil = "" Exit Function End If Formel = Right(Formel, Len(Formel) - 1) '= kürzen SlashPos = InStr(Formel, "/") If SlashPos = 0 Then 'Keine Division MsgBox "Die Zelle " & c.Address(0, 0) & " enthält keine Division!" DivisionsTeil = "" Exit Function End If If UCase(ZN) = "Z" Then Zahl = Left(Formel, SlashPos - 1) DivisionsTeil = CDbl(WorksheetFunction.Substitute(Zahl, ".", ",")) Else Zahl = Right(Formel, Len(Formel) - SlashPos) DivisionsTeil = CDbl(WorksheetFunction.Substitute(Zahl, ".", ",")) End If End Function
Sie können den Code als gepackte *.zip hier herunter laden. Dort ist einerseits der reine Text zum einfügen oder eine *.bas zum Import in ein Modul enthalten.
Hinweis: Diese Funktion prüft, ob es sich um eine Formel mit einer Division handelt. Mit reinen Bordmitteln ist das auch in Excel 2013 nicht so einfach zu realisieren. Aus dem Grunde ist es in jedem Fall eine Überlegung Wert, auch in dieser Version solch eine UDF einzusetzen.
… Und wenn absolut sicher gestellt ist, dass in der abgefragten Zelle nur eine Divisions-Formel steht, dann geht es auch „ohne Netz und doppelten Boden”, also ohne jegliche Kontroll-Möglichkeit mit solch einer Funktion:
Function ZaehlerNenner(c As Range, ZN As Integer) Dim aZN aZN = Split(c.FormulaLocal, "/") If ZN = 1 Then ZaehlerNenner = aZN(0) ElseIf ZN = 2 Then ZaehlerNenner = aZN(1) Else ZaehlerNenner = "" End If End Function
Wir räumen ein, dass die Split-Funktion auch im oberen Beispiel eingesetzt werden kann. Aber nur wenn Sie die Wege kennen, können Sie die Richtung entscheiden. Zu diesem Mini-Code gibt es keinen Download, einfach kopieren und in das Modul einfügen.
Ergänzung: Wenn Sie eine Lösung ohne VBA vorziehen, kann das in gewissen Grenzen auch mit reiner Tabellenfunktionalität erreicht werden. Voraussetzung ist, dass wirklich nur ein Bruch, eine Division in der oder den Quellzelle/n steht. Gehen Sie dazu so vor:
- Markieren Sie den auszuwertenden Bereich
- Daten | Text in Spalten | Getrennt
- Weiter >
- Als Trennzeichen (nur) den Schrägstrich (Divisionszeichen) bei Andere: eintragen
- Weiter >
- Im Feld Zielbereich die linke, obere Zelle eingeben, wo die Ausgabe erfolgen soll.
Beginnend in der benannten Ziel-Zelle wird nun der Dividend (Zähler) und in der danebenliegenden Zelle der Divisor (Nenner) eingetragen.
[NachObenLetzte Verweis=„CS: Zähler+Nenner zurückgeben”]