A common Forum question and one that Chandoo has written about a few times is, Does my data overlap with another range?
Last week, Pradhishnair, asked in the Chandoo.org Forums “I need to find if the values between range D2:E2 are overlapping in any of the following rages, if yes then where? (may be row number)”
I answered with an array formula:
{=”Overlap Row S.no. = ” &MIN(IF((D3:$D$41<=E2) *(E3:$E$41>=D2) >0, (A3:$A$41)))}
Which returns ether:
Overlap Row S.no. = x (If there is an overlap)
or
Overlap Row S.no. = 0 (If there is no overlap)
So today in Formula Forensics we will take a look at how the above formula works with a worked example.
Chainage
As always you can follow along with a worked example. This is a subset of Pradhishnair’s Data to simplify the length of the equations, but otherwise is the same as the original post: Download HerePradhishnair’s data consists of a list of chainages. Chainages are measurements of distances from a fixed point and relate to a segment of something. Chainage From is to the closest end of the segment and and Chainage To is to the furthest end of the segment and by default these are in order, that is To is always greater than From.
Using this we can check for overlapping data by simply checking if the From is less than the remaining To’s or the To value is greater than the remaining From’s
This is done for each row compared to the remaining rows of data by the array formula
=”Overlap Row S.no.: ” & MIN(IF((D3:$D$41<=E2) *(E3:$E$41>=D2) >0, (A3:$A$41))) Ctrl Shift enter
We can see that the above equation simply joins
“Overlap Row S.no.: “
To the result of
MIN(IF((D3:$D$41<=E2) *(E3:$E$41>=D2) >0, (A3:$A$41)))
Using the & operator
It will return:
Overlap Row S.no. = 0 if there is no overlap
Or
Overlap Row S.no. = x If there is an overlap.
So the function
MIN(IF((D3:$D$41<=E2) *(E3:$E$41>=D2) >0, (A3:$A$41)))
Is used to return the minimum value of an If() formula which is its only component
The If() statement usually has three components:
=If( Condition, Value if True, Value if False)
In our case, I will evaluate Row 2, Particularly Cell G2, against the remaining entries in the two lists.
=If((D3:$D$41<=E2) *(E3:$E$41>=D2) >0, (A3:$A$41))
Condition: (D3:$D$41<=E2) *(E3:$E$41>=D2) >0
Value if True: (A3:$A$41), This is just the S.No. in Column A
Value if False: Note that the If statement has no Value if it is False, I could put any value there eg: -1 or 0, but Excel evaluates it to 0 anyway so it hasn’t been used.
The If Statement says If (D3:$D$41<=E2) *(E3:$E$41>=D2) >0, then return (A3:$A$41)
What the condition is saying is If the To Data in the Current Row, Row 2, is Greater than or equal to the other From Values or the From Data in the Current Row, Row 2, is Less than the other To Value, Then this is True
To check this, in Cell I2, enter =(D3:$D$41<=E2) *(E3:$E$41>=D2) and evaluate it with F9 instead of Enter
Excel returns ={1;1;0;0;0;0;0;0;0}
Excel is showing us that the first and second entries have overlapping data.
Which we can see if we look at the data
The >0 at the end of the (D3:$D$41<=E2) *(E3:$E$41>=D2) >0, transforms the array of 0’s and 1’s to an array of Falses and Trues
To check this, in I3, enter =(D3:$D$41<=E2) *(E3:$E$41>=D2)>0 and evaluate it with F9 instead of Enter
Excel returns ={TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}
Now the If Statement will be True for the first two entries in the array and so will evaluate the Value if True component of the If Formula: (A3:$A$41)
We can check this
In cell I4 enter
=IF((D3:$D$41<=E2) *(E3:$E$41>=D2) >0, (A3:$A$41)) and press F9 instead of Enter
Excel returns
={2;3;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}
Which is the array of S.No’s which match our criteria
Now Min comes in
=MIN({2;3;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE})
Min returns the Minimum of these which is 2.
And that is appended to “Overlap Row S.No. = “
To return the answer: Overlap Row S.No. = 2
Which is the first overlapping row with Row 1
Custom Number Formats
You may have noticed that the numbers in Pradhishnair’s worksheet look a bit odd with a + in the middle: eg: D3 displays 142+000Pradhishnair is using a Custom Number Format of #+000
Select a Cell, eg D2, Press Ctrl 1, Select the Number Tab
If you select these cells and Press F2 Excel will show that the cells value is 142000
But Excel is using the custom Number format of #+000 to display the number with 3 digits after the +
Links to Overlapping Data Posts
http://chandoo.org/wp/2010/06/01/date-overlap-formulas/http://chandoo.org/wp/2011/03/09/ec1-machine-scheduling-in-excel/
Download
You can download a copy of the above file and follow along, Download Here.Other Formula Forensics Posts
You can learn more about how to pull Excel Formulas apart in the following postsFormula Forensic Series:
We Need Your Help
I received 3 ideas over the Xmas break from readers, and these will feature in coming weeks.However I do need more ideas for the rest of 2012 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 as Luke did in Formula Forensics 003. or like above.
If you have a formula that you would like explained but don’t want to write a post also send it in to Chandoo or Hui.
ps: I’m traveling to Esperance; Western Australia for a short holiday with the family but have left a neat Formula Forensic for you for next week.
0 comments:
Post a Comment