# substitute parameters with values in Excel formula

Dear Experts,

I am looking for a function (preferably) that would do the following:
- input: formula (string) or reference to a cell containing formula
- output: input formula (converted to string) but with parameters substituted with values

let's say I have a formula:
=sum(a1;a3;a5)
and cell a1=1, a3=3, a5=5
then the result should be =sum(1;3;5)

if the parameter is a range like in vlookup function, for example:
=vlookup(a1;a:a;3,0)
since second parameter is a range then it should remain unchanged.
the sample result should be in this case like:
=vlookup("pink";a:a;3,0)

is there a way (using VBA?) to achieve it in a relatively simple way?

thank you
Jarek
LVL 1
###### Who is Participating?

x

Commented:
my test as well.
``````'ver 1  9.Feb.2015

Function MakeFormula(rng As Range) As String

Dim ws As Worksheet, rawformula As String
Dim aa As String, param() As String

Set ws = rng.Worksheet

rawformula = rng.FormulaLocal

'find brackets
bl = InStr(1, rawformula, "(")
If bl > 1 Then
'there is a formula
MakeFormula = Left\$(rawformula, bl)  'the first part before bracket

br = InStrRev(rawformula, ")") - 1

'get parameters
param = Split(Mid\$(rawformula, bl + 1, br - bl), ",")
MakeFormula = MakeFormula & GetParamValue(param(0))
For i = 1 To UBound(param)
MakeFormula = MakeFormula & "," & GetParamValue(param(i))
Next i
MakeFormula = MakeFormula & Mid(rawformula, br + 1)
Else
MakeFormula = rawformula
End If

End Function

Function GetParamValue(param As String) As String
Dim aa As String, an As Integer, v As Variant
On Error Resume Next
Err.Clear
If (InStr(param, ":")) Then
'is a range definition itself
'so return as text
GetParamValue = param
Exit Function
End If

v = Range(param).Value
If Err > 0 Then
'wasnt a valid range so return as strin
GetParamValue = param
Else
If IsNumeric(v) Then
GetParamValue = Str(v)
ElseIf IsDate(v) Then
GetParamValue = Format(v, "dd/mmm/yyyy hh:mm:ss")
Else
GetParamValue = Chr(34) & v & Chr(34)
End If

End If
End Function
``````
makeparam.xlsm
0

Commented:
maybe.  the .FormulaLocal property returns the formula, the issue is in determining which items in the formula are parameters and which are constants.

ill run some tests using the () and commas as separators unless someone comes up with a better solution.
0

Commented:
This is not a simple question, so I am showing the idea.

Check this worksheet.
My settings use , as a list separator.
one for simple formual =A1
and another for Sum(A1,A2,A3)
formula-parse.xlsm
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.