Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

substitute parameters with values in Excel formula

Posted on 2015-02-07
3
Medium Priority
?
70 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 33

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 31

Assisted Solution

by:hnasr
hnasr earned 800 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 33

Accepted Solution

by:
Robberbaron (robr) earned 1200 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

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Windows Explorer lets you open cabinet (cab) files like any other folder. In VBA you can easily handle normal files and folders, but opening and indeed creating cabinet files takes a lot more - and that's you'll find here.
In this post, we will learn to set up the Group Naming policy and will see how it is going to impact the Display Name and the Email addresses of the Group.
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…
Enter Foreign and Special Characters Enter characters you can't find on a keyboard using its ASCII code ... and learn how to make a handy reference for yourself using Excel ~ Use these codes in any Windows application! ... whether it is a Micr…

571 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