Where named ranges are amts (D4:D11), id (I3), and ids (C4:C11). This is an array formula and must be entered with Control + Shift + Enter. The IF function does the work of figuring out which rows contain a match, and the SMALL function returns the nth value from that list. Inside of IF, the logical test is: which yields this array: Note the customer id matches at the 1st and 4th positions, which appear as TRUE. The “value if true” argument in IF generates a list of relative row numbers with this expression: which produces this array: This array is then “filtered” by the logical test results, and the IF function returns the following array result: Note we have valid row numbers for row 1 and row 2. This array is then processed by SMALL, which is configured to use values in column H to return “nth” values. The SMALL function automatically ignores the logical values TRUE and FALSE in the array. In the end, the formulas reduce to:

Handling errors

Once there are no more matches for a given id, the SMALL function will return a #NUM error. You can handle this error with the IFERROR function, or by adding logic to count matches and abort processing once the number in column H is greater than the match count. The example here shows one approach.

Multiple criteria

To add multiple criteria, you use boolean logic, as explained in this example.

Dave Bruns

Hi - I’m Dave Bruns, and I run Exceljet with my wife, Lisa. Our goal is to help you work faster in Excel. We create short videos, and clear examples of formulas, functions, pivot tables, conditional formatting, and charts.