Between Vlookup Key
While the VLOOKUP
and HLOOKUP
functions are powerful tools in Excel, they limit their search to the first column or row of a range. This post shows you how to leverage the COUNTIFS
function to perform an inclusive between search against the first two columns or rows of a range.
Moreover, the VLOOKUP
function searches the first column of a range and looks for an approximate or exact match. The approximate match search throws an exception when the lookup key’s value precedes the first item in the range, and picks up the row immediately less than the lookup key. This type of search requires two condition. The data must be presorted into an ascending order for the sort column, the range must be contiguous, and two matching keys shouldn’t exist. That means that each search column or row cell points to the row of interest for any search key greater than it and less than the next. An exact match search finds the row that matches the lookup key and throws an error when there isn’t an exact match.
Neither of these allow for range searches between non-contiguous sets, like the one below. The date ranges where a value should be found are from the 16th of a month to the end of a month rather than the range between the 16th of one month to the 15th of the next. While this could be done by structuring a row with zeros the gap periods, a more effective solution is possible by using the COUNTIFS
. At least, this is true from Excel 2007 forward.
The solution to this problem starts with recognizing how a COUNTIFS
works. The COUNTIF
provides the opportunity to compare a range of values against a single value, and the COUNTIFS
allows multiple comparisons of values against ranges of values. The COUNTIFS
function returns the number of matches that meet all conditions. Therefore, when a value is found in only one of the ranges the COUNTIFS
function returns a 1, and when a value is found n times it returns n as a number.
The formula in cell F2
checks for the number of times the value in F1
exists:
=COUNTIFS($A$1:$A$13,"<="&F1,$B$1:$B$13,">="&F1) |
If you evaluate when the foregoing function returns 1 before performing a VLOOKUP
function, you can guarantee a match within a non-contiguous range of values. That formula is:
=IF(COUNTIFS($A$1:$A$13,"<="&F1,$B$1:$B$13,">="&F1)=1,VLOOKUP(F1,A2:C13,3),0) |
Hope this helps some folks, as always …