Solved

substitute parameters with values in Excel formula

Posted on 2015-02-07
3
51 Views
Last Modified: 2016-02-10
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
0
Comment
Question by:ja-rek
  • 2
3 Comments
 
LVL 32

Expert Comment

by:Robberbaron (robr)
ID: 40596601
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
 
LVL 30

Assisted Solution

by:hnasr
hnasr earned 200 total points
ID: 40597252
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
 
LVL 32

Accepted Solution

by:
Robberbaron (robr) earned 300 total points
ID: 40597412
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

Open in new window

makeparam.xlsm
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This code takes an Excel list of URL’s and adds a header titled “URL List”. It then searches through all URL’s in column “A”, looking for duplicates. When a duplicate is found, it is moved to the top of the list. The duplicate URL’s are then highlig…
Excel can be a tricky bit of software to get your head around. Whilst you’ll be able to eventually get to grips with the basic understanding of how to get by, there are a few Excel tips that not everybody will even know about let alone know how to d…
This Micro Tutorial will demonstrate on a Mac how to change the sort order for chart legend values and decrpyt the intimidating chart menu.
This Micro Tutorial will demonstrate how to use longer labels with horizontal bar charts instead of the vertical column chart.

832 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question