Zähler oder Nenner ausgeben

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”]

Dieser Beitrag wurde unter Code-Schnipsel, Mit VBA/Makro, Rechnen & Zahlen abgelegt und mit , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.