fbpx
Search
Close this search box.

Formula Forensics No.004 – Fred’s Problem

Share

Facebook
Twitter
LinkedIn

About 6 months ago, Fred asked a question on the Chandoo.org Forums: I need idea on a simpler formula

In column A I have the total sum product of C to AU
Line one has all the names.
A2 = (B2*C2)+(D2*E2)+(F2*G2)+(H2*I2)+(J2*K2)+(L2*M2)+…+(AT2*AU2)
A3 = (B3*C3)+(D3*E3)+(F3*G3)+…+(AT3*AU3)

Is there is simpler way by line to do this without clicking each cell on line 2?

I tried Sumproduct but I think I have received a wrong answer during testing.

 

Hui offered a Sumproduct Formula as a solution

=SUMPRODUCT((B2:AT2) * MOD(COLUMN(B2:AT2) -1, 2), (C2:AU2) * MOD(COLUMN(C2:AU2), 2))

and then followed up with a simpler Sumproduct Formula a day later

=SUMPRODUCT(B2:AT2 * C2:AU2 * (MOD(COLUMN(B2:AT2), 2) =0))

Let’s take a look at this second solution.

 

Setup the Problem

Copy the numbers 10,20 into alternate Cells A2:U2 or download the example file here: Example File (Excel 97-2010)

Copy this formula into B6: =SUMPRODUCT(B2:U2 * C2:V2 * (MOD(COLUMN(B2:U2), 2)=0))


Pull The Formula Apart

Lets take a look inside this formula and see how it works.

=SUMPRODUCT(B2:U2*C2:V2*(MOD(COLUMN(B2:U2),2)=0))

We can see that in the above formula the main function used in the formula is a Sumproduct Function.

=SUMPRODUCT(B2:U2*C2:V2*(MOD(COLUMN(B2:U2),2)=0))

Within the Sumproduct function there are 3 arrays, which are multiplied together

Array 1: B2:U2

Array 2: C2:V2

Array 3: (MOD(COLUMN(B2:U2),2)=0)

What’s in these arrays?

Array 1 is simply the range from B2:U2

Array 2 is simply the range from C2:V2, note that it is offset from the first array by 1 Column.

This is so that the first value of the Second Array matches the first value of the First Array. That is they are both in position 1 within there respective arrays.

Array 3 is where all the action is.

Enter  =(MOD(COLUMN(B2:U2),2)=0) into a cell and press F9

Excel returns: ={TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE}

Lets look at what is happening here

=(MOD(COLUMN(B2:U2),2)=0)

Mod returns the remainder of the first value Column(B2:U2) after dividing it by the second value 2.

Column(B2:U2) returns the Column Number for each cell in the Range B2:U2.

Because this part of the formula is in a Sumproduct formula it is evaluated as an Array Formula and hence it does this for each cell in the range B2:U2, thus returning an Array as the answer.

We can see that if we enter =MOD(COLUMN(B2:U2),2) into a cell and evaluate it with F9

={0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1}

However in this case we want to convert this from an array of Numbers to an array of True/False

A simple addition of an =0 does the trick

=(MOD(COLUMN(B2:U2),2)=0)

Now causes the formula to return: ={TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE}

So How does this go together with the other 2 arrays?

We now have 3 arrays:

Array 110,20,10,20,10,20,10,20,10,20,10,20,10,20,10,20,10,20,10

Array 220,10,20,10,20,10,20,10,20,10,20,10,20,10,20,10,20,10,20

Array 3: TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE

When Multiplying arrays, Excel multiplies the first value of each array and then the second value of each array, etc, effectively doing

={10*20*True, 20*10*False , 10*20*True, 20*10*False , 10*20*True, 20*10*False , 10*20*True, 20*10*False , 10*20*True, 20*10*False , 10*20*True, 20*10*False , 10*20*True, 20*10*False , 10*20*True, 20*10*False , 10*20*True, 20*10*False , 10*20*True}

You can see above that when the 3 arrays are multiplied it will only be the Odd entries in Arrays 1 & 2 which are evaluated by the Sumproduct, as all the even entries are multiplied by False which is equivalent to Zero

So the above evaluates to

={200,0, 200,0, 200,0, 200,0, 200,0, 200,0, 200,0, 200,0, 200,0, 200}

Sumproduct then takes over and adds the values together returning, 2000, the correct answer.

 

Problem Extension

After solving the problem, Fred decided to add a column between each entry in the data set.

The solution is posted in the forum and is also shown in the example file.

You can work through that formula at your leisure, except to say that it is similar to the solution above.

Alternate Solution

Luke correctly pointed out that the data was poorly arranged and the solution would be much simpler had the data been more logically arranged.

However as an Excel practioner we are often called to solve other peoples dirty work.

 

HINTS

You will notice that in the solution of this problem I have done a few small things that make solving the problem easier.

Use Smaller Subsets of the Data.

Instead of putting numbers from Columns B to AU as Fred has I have used a set from Column B to U.

This way I can see all the data on one Excel screen without scrolling as well as the formula links and extents when pressing F2 on the cell containing the formula.

Use Simple Numbers

Use numbers that you can manually check. In this example I can easily, manually, check that the answer should be 2000.

Evaluate

Where ever possible, enter sections of a formula in a cell and evaluate its output:

=(MOD(COLUMN(B2:U2),2)=0) and press F9

={TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE}

See how easily we can check that this section is returning the correct values.

 

OTHER POSTS IN THIS SERIES:

You can learn more how to pull Excel Formulas apart in the following posts:

http://chandoo.org/wp/category/formula-forensics/

The link above, will show you all the posts in this series

 

WHAT FORMULAS WOULD YOU LIKE EXAMINED?

If you have any formulas you would like explained please feel free to leave a post here or send me an email:

If the formula is already on Chandoo.org or Chandoo.org/Forums, simply send the link to the post and a Comment number if appropriate.

If sending emails please attach an Excel file with the formula and data

 

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

Excel School made me great at work.
5/5

– Brenda

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.

letter grades from test scores in Excel

How to convert test scores to letter grades in Excel?

We can use Excel’s LOOKUP function to quickly convert exam or test scores to letter grades like A+ or F. In this article, let me explain the process and necessary formulas. I will also share a technique to calculate letter grades from test scores using percentiles.

14 Responses to “Formula Forensics No.004 – Fred’s Problem”

  1. Mawdo81 says:

    Hi,

    I beleive the "=0" in MOD(COLUMN(B2:U2),2)=0 is superfluous as you can multiply any number you like by 0 and still get 0. You just need to ensure that the 1's are returned in the correct place by adjusting the range you're "MOD"-ing:

    =SUMPRODUCT(B2:AT2 * C2:AU2 * MOD(COLUMN(C2:AU2), 2) )

    Great analysis of "how & why it works" though, thanks
    M

  2. Martin says:

    F9 !!!!
    What a discovering !!!!

    Thanks for the wisdom !!!

  3. Hui... says:

    @M
    You are correct
    The MOD(COLUMN(C2:AU2), 2) ) return an array of 0,1's
    The =0 converts that to an Array of True, Falses
    Which in this case isn't required.

  4. Fred says:

    Thank you Hui and Luke for showing me the door to a powerful sumproduct arrangement which I could never imagine in a million's years. I have, since then, used sumproduct, mod and other neat tricks learnt here at work. You have made me awesome! Big thank you!!

  5. Leon says:

    Hui, excellent explanation as always. Thought I should let you know that the link to your previous forensics is broken, or server is kaput. Either way, I can't access your previous posts

  6. simchuck says:

    You can avoid references to multiple ranges with a little tweak...

    =SUMPRODUCT( myRange * OFFSET(myRange,,1) * MOD(COLUMN(myRrange),2) )

    where myRange refers to B2:AU2 in the example.

  7. Andrew says:

    Love the F9

    Great way to demonstrate array formulas. I wish I'd known that earlier.

    Much easier than writing out squiggly arrays on a piece of paper or trying to squint at the tiny evaluate - step in - dialogue box.

    Could you add a warning that it replaces the formula you are writing - so don't do it on a cell you want to keep!

  8. Hui... says:

    @Andrew

    After using F9 it only replaces the contents of your cell if you press Enter
    To not replace the contents of your cell press Esc

    @Leon, Link fixed. Thanx.

  9. Kevin Lehrbass says:

    I think this formula works too: {=SUM(IF(B1:U1="a",B2:U2*C2:V2,""))}
    Note: you need to press control shift enter to get the special brackets (not just enter)

  10. Istiyak says:

    Supperrrbb !!

    Bt out of minddddd!!!

    Regards
    !$T!

  11. Chris Mishler says:

    The link to formula forensics in the email I got about this topic failed:
    http://chandoo.org/wp/category/formula-forensics/
    When I click on it, I get: http://chandoo.org/category/formula-forensics/ in the URL address bar, so the "wp" portion is missing.
    FYI

  12. Chandoo says:

    @Chris... Thanks for pointing it out. We have already fixed this error.

  13. This ended up over my head, but enjoyed trying to figure it out none the less.

Leave a Reply