How to check for hard-coded values in Excel formulas?

Share

Facebook
Twitter
LinkedIn

Here is a common problem. Imagine you are looking a complex spreadsheet, aptly titled “Corporate Strategy 2020.xlsx” which as 17 tabs, umpteen formulas and unclean structure. Whoever designed it was in insane hurry. The workbook has formulas like this, =SUM(Budget!A2:A30, 3600)+7925 .

It was as if Homer Simpson created it while Peter Griffin oversaw the project.

So how do you go about detecting all cells containing formulas with hard-coded values?

Finding hardcoded formula values in Excel - how to?

Alas, the usual methods fail

The usual methods to audit formulas are of no help here. Let’s see:

Show formulas (CTRL+`): Since we have way too many formulas, this approach requires a lot of squinting and gallons of coffee.

Go to special > Constants: This will only detect constant cells (ie input cells), but not cells containing formulas like =IF(2=2, Budget2014!A2, Budget2015!A2)

Trace Precedents: This can be used only for formulas that contain all hard-coded values (ex: SUM(1,2,3) will have no arrows, where as SUM(A1,A2, 7) will have some arrows

FORMULATEXT(): There is a new function called as FORMULATEXT() introduced in Excel 2013. This can tell us what is the formula in a cell. But we still need to develop additional logic to see if the formula text contains any constants.

Let’s build ‘Detect hard-coded formulas’ feature for Excel

The beauty of Excel is that, if there is something you can’t do with on screen features, you can build it. This is where VBA comes handy.

So we can create a hasConstants() user defined function that takes a cell as input and tells us TRUE or FALSE. True if the cell has constants (or hard-coded values) as formula parameters and False otherwise.

But what should be the logic for hasConstants()?

The process for detecting hard-coded values can be defined like this:

  1. Read the formula from left to right
  2. For each argument of the formula
    1. See if the argument is a valid reference or name
    2. If not, break the loop and return TRUE
  3. Return FALSE

How do we detect only the parameters?

There is no direct way to extract only the parameters of a formula. So what we do is we split the formula in to an array using the delimiter COMMA.

And we check each item of this array to see if it is

  • a function call (like SUM, COUNT, VLOOKUP)
  • a valid name or reference

What about nested functions?

The approach works the same way.

What about arithmetic, text or comparison operations?

For example, a formula like =A1+A2+17 should throw TRUE as it has hard-coded value.

So what we do is, we replace all such operators with delimiter (COMMA) before splitting the formula text.

We can consider +-*/%&><= as operators.

So how does the code look like?

Here is how it looks like:


Const COMMA = ","
Const OPERATORS = "+-*/%^&><="

Public Function hasConstants(thisCell As Range) As Boolean
    'finds out if thisCell has a formula with constants in it
    'i.e. hardcoded values
    
    Dim formula As String, args As Variant, i As Long
    Dim testRange As Range
    
    formula = replaceOperators(Mid(thisCell.formula, 2))
    
    args = Split(formula, COMMA)
    
    For i = LBound(args) To UBound(args)
        If Not (Len(args(i)) = 0 Or Right(args(i), 1) = "(" Or args(i) = ")") Then
            'not a function or null, must be one of the parameters
            'see if it is a valid name or reference
            If Not nameExists(CStr(args(i))) Then
                'name or reference doesn't exist, must be a constant / hard-coded value
                hasConstants = True
                Exit Function
            End If
       End If
    Next i
End Function

Function replaceOperators(formula As String) As String
    'replace operators such as +-/%^&>< with COMMA
    Dim char As Long
    
    For char = 1 To Len(OPERATORS)
        formula = Replace(formula, Mid(OPERATORS, char, 1), COMMA)
    Next char
    formula = Replace(formula, "(", "(" & COMMA)
    formula = Replace(formula, ")", COMMA & ")")
    replaceOperators = formula
    
End Function

Function nameExists(name As String) As Boolean
    'Check if a name or reference is valid
    Dim testR As Range
    
    On Error GoTo last
    
    Set testR = Range(name)
    nameExists = True
    Set testR = Nothing
last:

End Function

How to use this code?

Simple. Copy this code and add it to your personal macros workbook. (Tip: how to setup personal macros workbook?)

Conditional formatting to check hardcoded formula valuesThen use it in your complex workbook like this:

  • To check if a cell contains hardcoded formulas, write =hasConstants(A1)
  • To check if an entire range has hardcoded values,
    1. Select the range
    2. Go to home > conditional formatting > new rule
    3. Select formula type rule
    4. Type =hasConstants(top-left-cell relative reference)
    5. Format by filling a color or changing font style to detect easily
    6. Done

Does it work in all cases?

For most normal formulas this approach should work. I have tested it with various combinations and it seems to hold up good. I suggest you to double check the results for any type II errors (ie missed hard coded formulas) during initial few rounds.

Also, please share your observations in the comments so that we can improve this code.

Download Example Workbook

Click here to download this VBA codeAfter downloading the file, go to Module 1 (press ALT+F11) to see the code. Copy it or modify it as you see fit.

Your comments please?

I never had the need to check for hard-coded values until recently. But once I had that need, I found there is no simple way to do it. I believe this kind of check can be very useful for people in modeling, risk management or auditing positions.

What about you? How do you check for hard coded formulas? What methods do you use? Please share your thoughts and tips in the comments section.

More on spreadsheet auditing & risk management:

Check out below articles to learn more about how to audit spreadsheets and prevent risk of miscalculation:


Facebook
Twitter
LinkedIn

Share this tip with your colleagues

Excel and Power BI tips - Chandoo.org Newsletter

Get FREE Excel + Power BI Tips

Simple, fun and useful emails, once per week.

Learn & be awesome.

Welcome to Chandoo.org

Thank you so much for visiting. My aim is to make you awesome in Excel & Power BI. I do this by sharing videos, tips, examples and downloads on this website. There are more than 1,000 pages with all things Excel, Power BI, Dashboards & VBA here. Go ahead and spend few minutes to be AWESOME.

Read my storyFREE Excel tips book

Overall I learned a lot and I thought you did a great job of explaining how to do things. This will definitely elevate my reporting in the future.
Rebekah S
Reporting Analyst
Excel formula list - 100+ examples and howto guide for you

From simple to complex, there is a formula for every occasion. Check out the list now.

Calendars, invoices, trackers and much more. All free, fun and fantastic.

Advanced Pivot Table tricks

Power Query, Data model, DAX, Filters, Slicers, Conditional formats and beautiful charts. It's all here.

Still on fence about Power BI? In this getting started guide, learn what is Power BI, how to get it and how to create your first report from scratch.

9 Responses to “CP044: My first dashboard was a failure!!!”

  1. Oz says:

    CONGRATS on the book!

    Thanks for this podcast. It's great to hear about your disaster and recovery. It's a reminder that we're all human. None of this skill came easily.

  2. Din Muhammad Samimi says:

    Hey chandoo
    this really a good lesson learned
    but as I have already stated in one of my previous email that it would be more helpful for us if you could release videos of your classes for us
    thanks

  3. Nafi says:

    The article gave me motivation, especially you describing the terrible disaster that you faced but how to get back from the setbacks. Thanks for that, but with video this will be more fun.

  4. Amankwah says:

    You always motivate me with respect of the tools in excel. How we can really exploit it to the fullest. Thanks very much

  5. Juan says:

    Thank you very much, Chandoo, for your excellent lessons, I am anxious to learn so valuable tips and tricks from you, keep up the great job!
    I truly appreciate the transcripts of the podcasts, because as a speaker of English as a second language, it allows me to fully understand the material. It'd be great if you can add transcripts to your online courses too, I am sure people will welcome this feature.

  6. David Evans says:

    Dashboards for Excel has arrived in Laguna Beach, CA! Thanks!

    Now I need to make time to "learn and inwardly digest" its contents as one of my high school teachers would admonish us!

Leave a Reply