In early February Sujit asked a question at Chandoo.org, original post.
I require a formula stating criteria [0%-25% output will be 0, 26%-50% output will be 0.1, 51%-75% output will be 0.2, 76%-100% output will be 0.3 & 100% + output will be 0.4]
Kyle, responded with a neat Sumproduct formula
=SUMPRODUCT((B3>{0.25,0.5,0.75,1})*0.1)
I think it is so neat that it is worthy of sharing and detailing here at Formula Forensics:
So today we will pull Kyle’s answer apart to see what’s inside.
Kyle’s Formula
As usual we will work through this formula using a sample file for you to follow along. Download Here.
Kyle’s formula is a Sumproduct based formula
=SUMPRODUCT((B3>{0.25,0.5,0.75,1})*0.1)
Lets look at cell C3 as our example.
;
In C3 we see the formula: =SUMPRODUCT((B3>{0.25,0.5,0.75,1})*0.1)
Which consists of a Sumproduct function and a formula inside the sumproduct.
We know from Formula Forensics 007 that Sumproduct, Sums the Product of the Arrays, and that when there is only 1 array it simply sums the array elements.
In this case the Sumproduct only has a single array as an element
=SUMPRODUCT((B3>{0.25,0.5,0.75,1})*0.1)
and so the (B3>{0.25,0.5,0.75,1})*0.1 component must return an Array of elements for the Sumproduct to sum.
If we now look at the (B3>{0.25,0.5,0.75,1})*0.1 component.
We can see that it consists of a comparison B3>{0.25,0.5,0.75,1}
The result of the comparison is Multiplied by 0.1.
Sujit’s orginal question asked: 0%-25% output will be 0, 26%-50% output will be 0.1, 51%-75% output will be 0.2, 76%-100% output will be 0.3 & 100% + output will be 0.4
And Kyles formula is using B3>{0.25,0.5,0.75,1} to work out which category the value in B3 belongs to.
We can see this if in a blank cell say C5: we enter the following:
= B3>{0.25,0.5,0.75,1} press F9 not Enter.
Excel will respond with ={TRUE,TRUE,TRUE,FALSE}
This is showing us that the 1st, 2nd and 3rd elements in the formula: B3>{0.25,0.5,0.75,1}, are True
In our example the value in B3 is 80% which is 0.8 which is Greater than 0.25 and Greater than 0.5 and Greater than 0.75, but Not Greater than 1.0.
The next part of Kyle’s formula is (B3>{0.25,0.5,0.75,1})*0.1
In a blank cell say C7: enter the following:
= B3>{0.25,0.5,0.75,1}*0.1 press F9 not Enter.
Excel will respond with ={0.1,0.1,0.1,0}
This is showing us the result of
=(B3>{0.25,0.5,0.75,1})*0.1
={TRUE,TRUE,TRUE,FALSE} *0.1
={0.1,0.1,0.1,0}
Sumproduct now only has to add up the Array
=Sumproduct({0.1,0.1,0.1,0})
Which it does returning 0.3.
The Neat Part
The neat part of this is that Kyle has used the 0.1 Multiplier to Force the array to an array of Numbers for Sumproduct to sum.
Had Kyle used: =SUMPRODUCT((B3>{0.25,0.5,0.75,1}))*0.1
Excel would have returned an answer of 0
This is because as we saw in Formula Forensics 007, Sumproduct doesn’t know what to do with the array of True/False, they need to be converted to numerical equivalents for Sumproduct to operate on.
In a spare cell, say C9, enter: =SUMPRODUCT((B9>{0.25,0.5,0.75,1}))*0.1
Excel will respond with 0
Of course that can be fixed by using a double degative of a 1* inside the formula
In a spare cell, say C10, enter either:
=SUMPRODUCT(1*(B9>{0.25,0.5,0.75,1}))*0.1
or
=SUMPRODUCT(- -(B9>{0.25,0.5,0.75,1}))*0.1
Excel will respond with 0.3 as it should
Except that the formula is longer and now has to do 1 more multiplication.
Download
You can download a copy of the above file and follow along, Download Here.
Formula Forensics “The Series”
You can learn more about how to pull Excel Formulas apart in the following posts
We Need Your Help
I have received a few more ideas since last week and these will feature in coming weeks.
I do need more ideas though and so I need your help.
If you have a neat formula that you would like to share and explain, try putting pen to paper and draft up a Post like above or;
If you have a formula that you would like explained but don’t want to write a post also send it to Chandoo or Hui.














13 Responses to “Convert fractional Excel time to hours & minutes [Quick tip]”
Hi Purna..
Again a great tip.. Its a great way to convert Fractional Time..
By the way.. Excel has two great and rarely used formula..
=DOLLARFR(7.8,60) and =DOLLARDE(7.48,60)
basically US Account person uses those to convert some currency denomination.. and we can use it to convert Year(i.e 3.11 Year = 3 year 11 month) and Week(6.5 week = 6 week 5 days), in the same manner...
This doesn't work for me. When applying the custom format of [h]:mm to 7.8 I get 187:12
Any ideas why?
@Jason
7.8 in Excel talk means 7.8 days
=7.8*24
=187.2 Hrs
=187 Hrs 12 Mins
If you follow Chandoo's instructions you will see that he divides the 7.8 by 24 to get it to a fraction of a day
Simple, assuming the fractional time is in cell A1,
Use below steps to convert it to hours & minutes:
1. In the target cell, write =A1/24
2. Select the target cell and press CTRL+1 to format it (you can also right click and select format cells)
3. Select Custom from “Number” tab and enter the code [h]:mm
4. Done!
Hi, sorry to point this out but Column C Header is misspelt 'Hours Palyed'
good one
So how do I go the other way and get hours and minutes to fractional time?
If you have 7.5 in cell A1,
- Use int(A1) to get the hours.
- Use mod(A1,1)*60 to get minutes.
If you have 7:30 (formatted as time) in A1
- Use hours(a1) to get hours
- Use minutes(a1) to get minutes.
I had the same issue. You can solve it by changing the format as described above:
Right click cell > Format Cells > (In Number tab) > Custom > Then enter the code [h]:mm
([hh]:mm and [hhh]:mm are nice too if you want to show leading zeros)
Thanks guys, these are the tips I'm looking for.
...dividing the number of minutes elapsed by the percent change is my task - "int" is the key this time
It doesnt work for greater than 24 hours
It returns 1:30 for 25.5 hours. It should have returned 25:30
Ideally I would right function as
=QUOTIENT(A1,1)&":"&MOD(A1,1)*60
Sorry, replied to wrong comment....
----
I had the same issue. You can solve it by changing the format as described above:
Right click cell > Format Cells > (In Number tab) > Custom > Then enter the code [h]:mm
([hh]:mm and [hhh]:mm are nice too if you want to show leading zeros)
Clever use of MOD here to extract the decimal part of a number. Divide a number containing a decimal by 1 and return the remainder. Humm. Very clever.
Thanks very much, extremely useful !