Frage von keineAhnung1283, 72

[Excel] Formel als Text mit Werten ausgeben?

Hallo, kann ich eine Formel mit deren zugehörigen Werten ausgeben?

Als Beispiel:

A1: 1
A2: 2
A3: 3
B1: =A1*A2*A3   (ergibt natürlich 6)
jetzt möchte ich aber, dass diese Formel als Text mit zugehörigen Werten ausgegeben wird. Das Ergebnis müsste also so aussehen:
B1: 1*2*3 (anstatt A1*A2*A3, das wäre ja über FORMELTEXT einfach zu machen)

Geht sowas? Per VERKETTEN ist das natürlich machbar, aber immer recht viel Aufwand bei langen Formeln.

Gruß

Antwort
von Ghanasoccer, 36

Was du gerade machst nutze ich um zu überprüfen was an meiner Formel falsch ist wenn ich es nicht verstehe. Findet man unter Menüband->Formel-> Formelauswertung.

Ich hoffe ich helfe damit.

Falls das nichts gebracht hat versuche mal Strg + #

Oder Markiere die ganze Tabelle (oben links klicken) und drück = .

Hilft mir auch manchmal weiter

Expertenantwort
von DeeDee07, Community-Experte für Excel, 36

Wenn der Bereich der Zahlen zusammenhängt, wie in deinem Beispiel A1:A3, dann kannst du das folgendermaßen machen:

B1: =A1
B2: =B1&"*"&A2

Jetzt kannst du B2 nach unten kopieren, soweit die Zahlen in Spalte A reichen. Dabei wird der entsprechende Wert aus A immer angefügt. In der letzten Zeile von B steht dann die gesamte Formel.

Kommentar von keineAhnung1283 ,

Danke, das wäre so natürlich möglich. Allerdings ist man dann doch recht eingeschränkt. Also ein Makro oder eine Funktion, die eine Formel auf Anhieb ausgibt gibt es vermutlich nicht?

Antwort
von keineAhnung1283, 19

Habe folgendes Makro "bekommen", welches genau das macht, was ich meinte:

'by sandy666 (http://www.excelforum.com/showthread.php?t=1128613&p=4326610&viewfull=1#...)
Const debugMode As Boolean = False

Public Function LiteralFormula(ByVal rng As Excel.Range, _
Optional extraParens As Boolean = False) _
As String
Const maxAddressLength As Integer = 12
Dim inQuotes As Boolean

Dim parseString As String, tempString As String
Dim addressLength As Long, parsePosition As Long
Dim rangeLength As Long

Dim cursor As Long
Dim returnValue As String
Dim formulaString As String

If (rng.HasFormula) Then
formulaString = VBA.Right$(rng.Formula, _
VBA.Len(rng.Formula) - 1)
Else
Exit Function
End If

If debugMode Then
Debug.Print rng.Address & " has a formula: " & rng.Formula
End If

If Not hasReference(rng) Then
'no references in range, exiting
LiteralFormula = formulaString
If debugMode Then
Debug.Print "Returning " & formulaString
End If
Exit Function
End If

For cursor = 1 To VBA.Len(formulaString)
parseString = VBA.Mid$(formulaString, cursor, maxAddressLength)

If debugMode Then
Debug.Print "parsing string: " & parseString
' Stop
End If

If (VBA.Left$(parseString, 1) = VBA.Chr(34)) Then
inQuotes = Not inQuotes
End If

If Not inQuotes Then
addressLength = 0
For parsePosition = 2 To maxAddressLength
If isAddress(VBA.Left$(parseString, parsePosition)) Then
addressLength = parsePosition
Debug.Print "Parse progress: " & VBA.Left$(parseString, parsePosition), _
"Address length: " & addressLength
' Stop
Else
Exit For
End If
Next parsePosition

If addressLength > 0 Then
returnValue = returnValue & rng.Parent.Range(VBA.Left$(parseString, addressLength)).Value
cursor = cursor + addressLength - 1
Else
returnValue = returnValue & VBA.Left$(parseString, 1)
End If
Else
returnValue = returnValue & VBA.Left$(parseString, 1)
End If
Next cursor
LiteralFormula = returnValue
End Function

Private Function hasReference(ByVal rng As Range) _
As Boolean
If Not rng.HasFormula Then Exit Function

If isAddress(rng.Formula, False) Then
hasReference = True
End If
End Function

Private Function isAddress(strTest As String, _
Optional wholestring As Boolean = True) _
As Boolean
Dim re As Object
Dim strPattern As String

Set re = CreateObject("VBScript.RegExp")

If (wholestring) Then strPattern = "^"
strPattern = strPattern & _
"[\$]{0,1}[A-Z]{1,3}[\$]{0,1}[1-9][0-9]{0,6}"
If (wholestring) Then strPattern = strPattern & "$"

re.Pattern = strPattern
re.IgnoreCase = True

isAddress = re.test(strTest)
End Function

Keine passende Antwort gefunden?

Fragen Sie die Community