Zähler oder Nenner ausgeben

Mittels einer Funktion (UDF) den Zähler oder Nenner einer Division zurückgeben

Vor Ex­cel 2013 war es mit „Bor­d­mit­teln” nicht mög­lich, den Text ein­er For­mel in ein­er Zel­le aus­zu­ge­ben oder sonst­wie auszuw­erten. Für alle Ver­sio­nen ist eine UDF hil­fre­ich oder sog­ar von­nöten, wenn aus ein­er eingegebe­nen Divi­sions-Formel der Div­i­dend und/oder der Divi­sor berech­net wer­den sol­len. Im fol­gen­den Code wird we­gen der bes­se­ren Unter­schei­dung und auch kürz­eren Schreib­weise „Z” für „Zäh­ler” und „N” für „Nen­ner” statt „Div­i­dend” oder „Di­vi­sor„ver­wen­det.

Hin­weis: Die­se Funk­tion ist dar­auf aus­gelegt, dass auss­chließlich die Divi­sion in der Zel­le berech­net wird. Ist die ei­gent­li­che Divi­sion nur ein Teil der Gesamt­formel, kann die­se UDF kein kor­rek­tes Ergeb­nis brin­gen.

Die Funk­tion muss in ei­nem all­ge­meinen Mod­ul gespe­ichert wer­den, sie­he auch hier. Der Auf­ruf erfol­gt dann beispiel­sweise so:
=DivisionsTeil(A1;"z")
wo­bei A1 die auszuw­er­tende Zel­le ist und "z" für den Zäh­ler, also den Div­i­den­den ste­ht. Die Groß- Klein­schrei­bung ist nicht rel­e­vant. – 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ön­nen den Code als gepack­te *.zip hier her­un­ter la­den. Dort ist ein­er­seits der rei­ne Text zum ein­fü­gen oder eine *.bas zum Im­port in ein Mod­ul enthal­ten.

Hin­weis: Die­se Funk­tion prüft, ob es sich um eine For­mel mit ein­er Divi­sion han­delt. Mit rei­nen Bor­d­mit­teln ist das auch in Ex­cel 2013 nicht so ein­fach zu real­isieren. Aus dem Grun­de ist es in je­dem Fall eine Über­legung Wert, auch in die­ser Ver­sion solch eine UDF einzuset­zen.

… Und wenn abso­lut sich­er ge­stellt ist, dass in der abge­fragten Zel­le nur eine Divi­sions-Formel ste­ht, dann geht es auch „ohne Netz und dop­pel­ten Bo­den”, also ohne jeg­li­che Kon­troll-Möglichkeit mit solch ein­er Funk­tion:

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äu­men ein, dass die Split-Funk­tion auch im obe­ren Bei­spiel einge­set­zt wer­den kann. Aber nur wenn Sie die Wege ken­nen, kön­nen Sie die Rich­tung entschei­den. Zu die­sem Mi­ni-Code gibt es kei­nen Down­load, ein­fach ko­pie­ren und in das Mod­ul ein­fü­gen.


 

Er­gän­zung: Wenn Sie eine Lö­sung ohne VBA vor­zie­hen, kann das in gewis­sen Gren­zen auch mit rein­er Tabel­len­funk­tion­al­ität erre­icht wer­den. Voraus­set­zung ist, dass wirk­lich nur ein Bruch, eine Divi­sion in der oder den Quell­zel­le/n ste­ht. Ge­hen Sie dazu so vor:

  • Mar­kie­ren Sie den auszuw­er­tenden Bere­ich
  • Dat­en | Text in Spal­ten | Getren­nt
  • Weit­er >
  • Als Trennze­ichen (nur) den Schräg­strich (Divi­sion­sze­ichen) bei An­de­re: ein­tra­gen
  • Weit­er >
  • Im Feld Ziel­bere­ich die lin­ke, obe­re Zel­le ein­ge­ben, wo die Aus­gabe erfol­gen soll.

Begin­nend  in der benan­nten Ziel-Zel­le wird nun der Div­i­dend (Zäh­ler) und in der daneben­liegen­den Zel­le der  Divi­sor (Nen­ner) einge­tra­gen.

 [NachOben­Let­zte Ver­weis=„CS: Zäh­ler+Nen­ner zurück­geben”]

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