For a given Excel formula in a cell, I’d like to be able to parse the formula in order to get a list of Excel Range references contained within the formula.
For example, if I have a cell with this formula:
= A + 25 + B
….I would like to be able to get an array of excel ranges contained within the formula, so in this case, it would contain [A] and [B]
“Why do you even want to do this”?, I can hear you asking:
Just one example of why I want to do this is to look up “labels” for ranges in formulas…..so, as opposed to just doing a CTRL+~ to view the formulas in my sheet, I’d like the option of programatically accessing the range references within the formula in order to do a lookup of the label beside the target range.
So, in my above example, I could then write formulas something like:
=Offset(CellFormulaRanges('TheAddressMyFormulaIsIn',1),0,-1)
=Offset(CellFormulaRanges('TheAddressMyFormulaIsIn',2),0,-1)
…which would give me the the label to the left of the 1st and 2nd ranges within the formula.
Doing this would have to call upon some functionality already within Excel itself, as hand writing a formula parser is a complicated task:
http://ewbi.blogs.com/develops/2004/12/excel_formula_p.html
Thanks to @TimWilliams and @brettdj for pointing me in the right direction to previous discussions on this topic, I can confidently say:
NO, EXCEL DOES NOT HAVE A METHOD FOR PARSING.
However, for my fairly minimal purposes, I’ve come up with something that works, works with cross worksheet references, and can be called from a UDF.
However, it is extremely brittle, and there are multitudes of perfectly legitimate formulas that I’m certain it wouldn’t handle properly.
The code is a mess and could be greatly improved but I just wanted to throw it up on here as I’m moving onto to something else for the time being….
EDIT
Also found this, which looks very interesting:
http://www.dailydoseofexcel.com/archives/2009/12/05/formula-tokenizer/
(just google SplitMultiDelims for that function)