*The tutorial shows how to lookup with multiple criteria in Excel using INDEX and MATCH and a few other ways.*

Although Microsoft Excel provides special functions for vertical and horizontal lookup, expert users normally replace them with INDEX MATCH, which is superior to VLOOKUP and HLOOKUP in many ways. Among other things, it can look up two or more criteria in columns and rows. This tutorial explains the syntax and inner mechanics in full detail so that you can easily adjust the formula for your particular needs. To make the examples easier to follow, you are welcome to download our sample workbook.

## Excel INDEX MATCH with multiple criteria

When working with large databases, you may sometimes find yourself in a situation when you need to find something but don't have a unique identifier for the search. In this case, lookup with several conditions is the only solution.

To look up a value based on multiple criteria in separate columns, use this generic formula:

*return_range*, MATCH(1, (

*criteria1*=

*range1*) * (

*criteria2*=

*range2*) * (…), 0))}

Where:

*Return_range*is the range from which to return a value.*Criteria1*,*criteria2*, … are the conditions to be met.*Range1*,*range2*, … are the ranges on which the corresponding criteria should be tested.

Important note! This is an array formula and it must be completed with Ctrl + Shift + Enter. This will enclose your formula in {curly brackets}, which is a visual sign of an array formula in Excel. Do not try typing the braces manually, that won't work!

The formula is an advanced version of the iconic INDEX MATCH that returns a match based on a single criterion. To evaluate multiple criteria, we use the multiplication operation that works as the AND operator in array formulas. Below, you will find a real-life example and the detailed explanation of the logic.

### INDEX MATCH with several criteria - formula example

For this example, we will be using a table in the so-called "flat-file" format with each separate criteria combination (region-month-item in our case) on its own row. Our goal is to retrieve the sales figure for a certain item in a specific region and month.

With the source data and criteria in the following cells:

*Return_range*(sales) - D2:D13*Criteria1*(target region) - G1*Criteria2*(target month) - G2*Criteria3*(target item) - G3*Range1*(regions) - A2:A13*Range2*(months) - B2:B13*Range3*(items) - C2:C13

The formula takes the following shape:

`=INDEX(D2:D13, MATCH(1, (G1=A2:A13) * (G2=B2:B13) * (G3=C2:C13), 0))`

Enter the formula, say in G4, complete it by pressing Ctrl + Shift + Enter and you will get the following result:

### How this formula works

The trickiest part is the MATCH function, so let's figure it out first:

`MATCH(1, (G1=A2:A13) * (G2=B2:B13) * (G3=C2:C13), 0))`

As you may remember, MATCH(lookup_value, lookup_array, [match_type]) searches for the lookup value in the lookup array and returns the relative position of that value in the array.

In our formula, the arguments are as follows:

*Lookup_value*: 1*Lookup_array*: (G1=A2:A13) * (G2=B2:B13) * (G3=C2:C13)*Match_type*: 0

The 1^{st} argument is crystal clear - the function searches for the number 1. The 3^{rd} argument set to 0 means an "exact match", i.e. the formula returns the first found value that is exactly equal to the lookup value.

The question is - why do we search for "1"? To get the answer, let's have a closer look at the lookup array where we compare each criterion against the corresponding range: the target region in G1 against all regions (A2:A13), the target month in G2 against all months (B2:B13) and the target item in G3 against all items (C2:C13). An intermediate result is 3 arrays of TRUE and FALSE where TRUE represents values that meet the tested condition. To visualize this, you can select the individual expressions in the formula and press the F9 key to see what each expression evaluates to:

The multiplication operation transforms the TRUE and FALSE values into 1's and 0's, respectively:

`{1;1;1;1;1;1;0;0;0;0;0;0} * {0;0;1;1;0;0;0;0;1;1;0;0} * {1;0;1;0;1;0;1;0;1;0;1;0}`

And because multiplying by 0 always gives 0, the resulting array has 1's only in the rows that meet all the criteria:

`{0;0;1;0;0;0;0;0;0;0;0;0}`

The above array goes to the *lookup_array* argument of MATCH. With *lookup_value* of 1, the function returns the relative position of the row for which all the criteria are TRUE (row 3 in our case). If there are several 1's in the array, the position of the first one is returned.

The number returned by MATCH goes directly to the *row_num* argument of the INDEX(array, row_num, [column_num]) function:

`=INDEX(D2:D13, 3)`

And it yields a result of $115, which is the 3^{rd} value in the D2:D13 array.

## Non-array INDEX MATCH formula with multiple criteria

The array formula discussed in the previous example works nice for experienced users. But if you are building a formula for someone else and that someone does not know array functions, they may inadvertently break it. For example, a user may click your formula to examine it, and then press Enter instead of Ctrl + Shift + Enter. In such cases, it would be wise to avoid arrays and use a regular formula that is more bulletproof:

*return_range*, MATCH(1, INDEX((

*criteria1*=

*range1*) * (

*criteria2*=

*range2*) * (..), 0, 1), 0))

For our sample dataset, the formula goes as follows:

`=INDEX(D2:D13, MATCH(1, INDEX((G1=A2:A13) * (G2=B2:B13) * (G3=C2:C13), 0, 1), 0))`

### How this formula works

As the INDEX function can process arrays natively, we add another INDEX to handle the array of 1's and 0's that is created by multiplying two or more TRUE/FALSE arrays. The second INDEX is configured with 0 *row_num* argument for the formula to return the entire column array rather than a single value. Since it's a one-column array anyway, we can safely supply 1 for *column_num*:

`INDEX({0;0;1;0;0;0;0;0;0;0;0;0}, 0, 1) returns {0;0;1;0;0;0;0;0;0;0;0;0}`

This array is passed to the MATCH function:

`MATCH(1, {0;0;1;0;0;0;0;0;0;0;0;0}, 0)`

MATCH finds the row number for which all the criteria are TRUE (more precisely, the the relative position of that row in the specified array) and passes that number to the *row_num* argument of the first INDEX:

`=INDEX(D2:D13, 3)`

## INDEX MATCH with multiple criteria in rows and columns

This example shows how to perform lookup by testing two or more criteria in rows and columns. In fact, it's a more complex case of the so-called "matrix lookup" or "two-way lookup" with more than one header row.

Here's the generic INDEX MATCH formula with multiple criteria in rows and columns:

*table_array*, MATCH(

*vlookup_value*,

*lookup_column*, 0), MATCH(

*hlookup_value1*&

*hlookup_value2*,

*lookup_row1*&

*lookup_row2*, 0))}

Where:

*Table_array* - the map or area to search within, i.e. all data values excluding column and rows headers.

*Vlookup_value* - the value you are looking for vertically in a column.

*Lookup_column* - the column range to search in, usually the row headers.

*Hlookup_value1, hlookup_value2, … * - the values you are looking for horizontally in rows.

*Lookup_row1, lookup_row2, … *- the row ranges to search in, usually the column headers.

Important note! For the formula to work correctly, it must be entered as an **array formula** with Ctrl + Shift + Enter.

It is a variation of the classic two-way lookup formula that searches for a value at the intersection of a certain row and column. The difference is that you concatenate several hlookup values and ranges to evaluate multiple column headers. To better understand the logic, please consider the following example.

### Matrix lookup with multiple criteria - formula example

In the sample table below, we'll be searching for a value based on the row headers (Items) and 2 column headers (Regions and Vendors). To make the formula easier to build, let's first define all the criteria and ranges:

*Table_array*- B3:E4*Vlookup_value*(target item) - H1*Lookup_column*(Row headers: items) - A3:A4*Hlookup_value1*(target region) - H2*Hlookup_value2*(target vendor) - H3*Lookup_row1*(Column headers 1: regions) - B1:E1*Lookup_row2*(Column headers 2: vendors) - B2:E2

And now, supply the arguments into the generic formula explained above, and you will get this result:

`=INDEX(B3:E5, MATCH(H1,A3:A5,0), MATCH(H2&H3,B1:E1&B2:E2,0))`

Remember to complete the formula by pressing the Ctrl + Shift + Enter shortcut, and your matrix lookup with multiple criteria will be done successfully:

### How this formula works

As we are searching vertically and horizontally, we need to supply both the row and column numbers for the INDEX(array, row_num, column_num) function.

*Row_num* is delivered by MATCH(H1, A3:A5, 0) that compares the target item (Apples) in H1 against the row headers in A3:A5. This gives a result of 1 because "Apples" is the 1st item in the specified range.

*Column_num* is worked out by concatenating 2 lookup values and 2 lookup arrays: MATCH(H2&H3, B1:E1&B2:E2, 0))

The key factor for success is that the lookup values should match the column headers exactly and be concatenated in the same order. To visualize this, select the first two arguments in the MATCH formula, press F9, and you will see what each argument evaluates to:

`MATCH("NorthVendor 2", {"NorthVendor 1", "NorthVendor 2", "SouthVendor 1", "SouthVendor 2"}, 0)`

As "NorthVendor 2" is the second element in the array, the function returns 2.

At this point, our lengthy two-dimensional INDEX MATCH formula transforms into this simple one:

`=INDEX(B3:E5, 1, 2)`

And returns a value at the intersection of the 1st row and 2nd column in the range B3:E5, which is the value in the cell C3.

That's how to look up multiple criteria in Excel. I thank you for reading and hope to see you on our blog next week!

## Practice workbook for download

Excel INDEX MATCH multiple criteria (.xlsx file)

## 192 comments

Hi, I have a question

So I created a table including the origin, destination, shipment type, max weight and price. The shipment type has 2 types: box & pallet, the quantity of box is not included but for the quantity of pallet. the more quantities pallet have, the higher price it will be. I can use index and match to find out the price when I filter the origin & destination on the pivot table, but I can't figure out the pallet one since the quantity limits my imagination.

For my formula of box one: =INDEX(Table2[PRICE], MATCH(1,(B2=Table2[ORIGIN])*(C2=Table2[DES]),0))

Could you please assist me on the pallet one? It's better if you can combine these 2 formulas together, like writing a ifs statement.

Thank you!

Hi! Sorry, I do not fully understand the task. Unfortunately, this information is not enough to understand what you need. To understand what you want to do, give an example of the source data and the desired result.

Hi

I am struggling with an index and match

The table of data would look a bit like the below

I need to look up the data in table 1, lookup the data in column A and column B, look across the rows in table 2, from column C-E to find corresponding data from Column A table 1, then look at the value in table 1 column B, check if it is in between the range of min and max , and return the value corresponding to the value under column C-E for the data type within column A in table 1, and return the value to column C in table 1.

Table 1 sheet 1is the input table, table 1 sheet 2 is the data table

All help appreciated. thanks

Table 1 (Sheet1)

Column A Column B column C

Nike 5 5.5

NB 11 1.1

Table 1(Sheet2)

Column A Column B Column C Column D Column E

Range Min Range Max Nike NB Adidas

1 10 5.5 4.2 3.9

11 20 3 .1 1.1 2.2

Sorry, but we cannot offer assistance beyond the scope of this blog. The solution to your query requires a more comprehensive approach and cannot be addressed through a one formula. However, if you have a specific question about a function or formula, feel free to ask, and we will do our best to assist you. Also describe the result you want to get.

Hello

Can you help me to make consolidate of two different sheets data by using the same formula as you have shown above.

Hi! I can't work with your worksheets. But I can give advice if you describe the problem and the formula.

Using below table and knowing User ID and a Date that would fall somewhere between the Valid From and Valid Until looking to identify the Role at a given point in time.

For example, for jsmith1 on 1/6/2022, want it to return Tech Agent

Valid From Valid Until User ID Name Name Last/First Role Site

11/4/2021 12/1/2021 jsmith1 John Smith Smith, John Agent Wichita

12/1/2021 12/19/2021 jsmith1 John Smith Smith, John Agent Wichita

12/19/2021 1/1/2022 jsmith1 John Smith Smith, John Agent Wichita

1/1/2022 1/9/2022 jsmith1 John Smith Smith, John Tech Agent Wichita

1/9/2022 1/16/2022 jsmith1 John Smith Smith, John Special Agent Wichita

1/16/2022 1/30/2022 jsmith1 John Smith Smith, John Manager Wichita

1/30/2022 2/1/2022 jsmith1 John Smith Smith, John Manager Wichita

2/1/2022 2/6/2022 jsmith1 John Smith Smith, John Supervisor Wichita

Hi!

Have you tried the ways described in this blog post? Check the formula below, it should work for you:

=INDEX(D1:D10,MATCH(1,(A1:A10<$K$1)*(B1:B10>$K$1)*(C1:C10="jsmith1"),0))

Hello.

I have 2 sheets. The first sheets has part numbers, Qty produced and Material Name, Material Needed(has formula) The second sheet has the part numbers and qty produced( exported from our system) I wanted to vlookup the Qty Produced on sheet 2 to sheet1 so I could compute my material requirement. Some of the values displays but most displays "N/A". I have already changed the format for both sheets to text or numbers so they would have the same but the N/A still appears. The part numbers which is the lookup value are numeric and alpha numeric. Thank you and I hope you can help me with my problem.

Hi!

Unfortunately, without seeing your data, it is difficult to give you any advice. N/A error means no value was found. There may be extra spaces or other characters.

Worked perfect. Thanks!

Sorry formula is:

INDEX($B$3:$B$7,MATCH(1,(--(A11=$A$3:$A$7))*(--("Beer"$C$3:$C$7)),0))

Sorry again, but the post is not showing "does not equal" to Beer.

Is there an INDEX and MATCH formula that can exclude values that match a criterion but does not require the use of control + shift + enter?

For example, I want a formula to exclude all values that matches to “Beer” but return all other values. I have something in mind like:

INDEX($B$3:$B$7,MATCH(1,(--(A11=$A$3:$A$7))*(--("Beer"$C$3:$C$7)),0))

But this formula only works with control + shift + enter. Is there a formula that does not require control + shift + enter?

Hello!

Array formulas in Excel365 do not require Ctrl + Shift + Enter. For more information about array formulas, see this article: Excel array formulas, functions and constants - examples and guidelines.

Thank you. Unfortunately, I don't have a copy of Excel365. I am currently using Excel from Microsoft Home Office 2019. I'm looking for a formula that does not require Ctrl + Shift + Enter since the braces surrounding the formula are easily removed when the array is edited.

Hi!

When you edit an array formula, always end the editing with Ctrl + Shift + Enter. Read more: Array formulas and functions in Excel - examples and guidelines.

Hello, you are not answering the question. I have already explained why an array formula won't work for me. I am looking for a non array formula. But thanks for your time.

The issue you want to solve is unknown to me. But if you need to find values by the criterion, then in your Excel you can do this only with help of array formulas or VLOOKUP function. Other functions are not available to you. I answered your question?

Hi

I'm using this formula to search the booking number from the table but it won't work for multiple results

={INDEX(Table1[Booking],MATCH(1,(ISNUMBER(SEARCH(A1,Table1[Remarks]))*(ISNUMBER(SEARCH(B1,Table1[Remarks])))),0))}

How can I change these formula to list out all results?

Thanks!

Hi!

Try to use the recommendations described in this article: How to Vlookup multiple values in Excel with criteria. This should solve your task.

Hey there, i have problem, my boss ask me to compile big data where i have 2 column and 1 column have multiple criteria, he want me only show result which is not 0.

example:

A | B | C |

-----------------------------------------

Anna | Sales 1 | 1 |

-----------------------------------------

Anna | Cashier | 36 |

----------------------------------------

Anna | Sales 2 | 0 |

----------------------------------------

Sally | Sales 1 | 0 |

----------------------------------------

Sally | Cashier | 75 |

----------------------------------------

Sally | Sales 2 | 2 |

----------------------------------------

just imagine i have big data more than the 2 criteria in coloumn B, and my boss ask me to take only Sally in sales area which not 0 ( cause in column C, only have 0 and other number but have more than 1 sales type) so the result should be

A | B |

-----------------------

Sally | 2 |

-----------------------

Anna | 1 |

Hey,

You can get a list of values by condition with the FILTER function. To find a "Sales" match, use the ISNUMBER and SEARCH functions

Try this formula:

=FILTER(A1:C10,(ISNUMBER(SEARCH("Sales",B1:B10)))*(C1:C10>0))

I want to know how to compare 2 column such as:

A B

ABC | GOOD

ABC | GOOD

ABC | GOOD = TRUE

A B

ABC | GOOD

ABC | GOOD

ABC | BAD = FALSE

Is it possible?

Hi!

If I understand correctly, you want to determine if all values in the column are the same. Use COUNTIF function.

=COUNTIF(A:A,A1)=COUNTA(A:A)

If this does not help, explain the problem in detail.

Hi,

I have a spreadsheet where I need to get the value (string of text) in column A that is in the cell to the left and 1 down from a non-blank value in column B. So, the set up of the spreadsheet has headers in row 1, then rows A2-A4 list strings and B2-B3 are empty (blank) then B4 has a number, repeat with A5-A7 strings and B5-B6 empty then B7 a number, . . .. What I need is the string from A2, then A5, then A8, . . .. I've tried some formulas with index, match, isblank, and offset, but I'm still too novice to excel to get this figured out quickly.

Thanks for your help!

Hello!

To get a list of values by condition, use the FILTER function. To take the value of the cell to the right of the current one, use the OFFSET function.

I believe the following formula will help you solve your task:

=FILTER(A2:A20,NOT(ISBLANK(OFFSET(A2:A20,-1,1))))

Thanks, the suggested formula worked perfectly!

Hello,

I need to come up with the index match formula to get the data from my large data sheet. I have a table in excel with the same questions but different answers and comment for each state, I need to pull all the data into the tabular display. I want to click o the cell and type e.g. Oklahoma and all my data will be pulled into my new sheet. Does anyone have idea how to do this?

Thank you in advance!

Hi!

To get data by condition, try the FILTER function. Here is the article that may be helpful to you: Excel FILTER function - dynamic filtering with formulas

Is it possible to use your methods to utilize OR/AND functions? In my data I have 3 criteria to compare:

Table1:

Column A: Name

Column B: Question 1 (Yes/No)

Column C: Question 2 (Yes/No)

Column D: Question 3 (Yes/"Blank")

The goal is to list all the rows where the answers to EITHER question 1 -OR- 2 is "Yes" -AND- the answer to question 3 is "Yes".

As a result, any row where question 3 is blank would be excluded, and any rows where BOTH questions 1 and 2 are "No" are also excluded.

Hello!

To get a table of values by conditions, I recommend using the FILTER function

=FILTER(A2:D10,((B2:B10="yes")+(C2:C10="yes"))*(D2:D10="yes"))

For more information, please read Excel FILTER function - dynamic filtering with formulas.

Hi,

How would you write the "Matrix lookup with multiple criteria"- specifically the part "MATCH(H2&H3,B1:E1&B2:E2) using the indirect function?

I was typing it as ,MATCH($A$4&"*"&$A63&"*",INDIRECT("'"&A$1&"'!$A:$A")&INDIRECT("'"&A$1&"'!$B:$B")

but it keeps coming up as an error

thank you

Hi!

I can't check your formula because I don't have your data. And you didn't explain what result you want to get.

I don't think it makes sense to combine the two INDIRECT functions: INDIRECT("'"&A$1&"'!$A:$A")&INDIRECT("'"&A$1&"'!$B:$B")

Maybe this article will be helpful: INDEX MATCH MATCH in Excel for two-dimensional lookup.

Hi,

Thank you for your reply, sorry I haven't been clear. So, it's already a two dimensional INDEX MATCH MATCH function as I'm working on a cashflow, where there are two columns of criteria and one row. So at the moment it is working fine like this:

=IFERROR(INDEX('Sheet1'!$A:$Z,MATCH($A$4&"*"&$A32&"*",'Sheet1'!$A:$A&'Sheet1'!$B:$B,0),MATCH(F$2,'Sheet1'!$A$1:$Z$1,0)),0)

However, I would like to make it more dynamic by using an indirect function for 'Sheet1'!', Is this possible?

thank you in advance.

what will be my formula if I want to get the column header starting from given criteria.

Example:

01-Jul 02-Jul 03-Jul 04-Jul 05-Jul 06-Jul 07-Jul 08-Jul 09-Jul 10-Jul

A 1 1 1 1 1 R R R 1 1

i want to get the end date of my training given that I have 4 days duration (not including restday R).

start date would be 04-Jul.

what would be my formula if i want to start counting the 4 days from 04-Jul, result should be 10-Jul.

thank you

Hello!

To add working days to a date, use the NETWORKDAYS function. You can see examples in this guide: Calculating weekdays in Excel - WORKDAY and NETWORKDAYS functions.

Great alternative to nested IFs. How do I make the formula, from your example, contain "and/or" criteria rather than purely having "and" criteria:

=INDEX(D2:D13, MATCH(1, (G1=A2:A13) * (G2=B2:B13) * (G3=C2:C13), 0))

Hello!

Multiplying criteria means an AND condition. Summing criteria means an OR condition. Replace * with +.

Just a quick note to thank you for the how-to! Though I am slowly picking up cool tricks in Excel I doubt I would have ever figured this out on my own. Had to tweak to be able to drag formula down multiple cells but managed to match up data from multi spreadsheets with thousands of rows. Just did =INDEX(Sheet9!C:C, MATCH(1, INDEX((A2=Sheet9!A:A) * (B2=Sheet9!B:B), 0, 1), 0)) which was scary spinning wheel slow and sure there is cleaner ways to do but it worked. Much appreciate!!

How would I write a formula that is capable of checking across multiple sheets to find a specific date and then pull the data from the particular sheet that the date appears on?

I have searched high and low through numerous sites and forums and have not been able to find anything that fits the bill.

I am using Excel 2010. The data being pulled is just numbers to one decimal point.

What I have.

The first sheet (Last 31 Days) is where I am pulling the data to. I have a formula that updates the dates shown each day so that the individual cells in column B show the last 31 days.

The second sheet (2022) contains data for 2022 separated into each month (actual and dummy data).

The third sheet (2023) contains data for 2023 separated into each month (dummy data).

All 3 sheets are exactly the same format and layout.

What I would like the formula to do is to check the "2022" sheet for the required date and pull the data from that sheet if found, but if it does not find the required date, then moves to the "2023" sheet to find the required date and pull the data from that sheet if found.

Formulas I have that work individually.

=INDEX('2022'!$C$3:$C$389, MATCH(B3, '2022'!$B$3:$B$389, 0))

=INDEX('2023'!$C$3:$C$389, MATCH(B3, '2023'!$B$3:$B$389, 0))

B3 - the cell that contains the date on the "Last 31 Days" sheet.

'2022'!$B$3:$B$389 - the cell range that the date is being searched on the "2022" sheet.

'2022'!$C$3:$C$389 - the cell range that the data is being pulled from on the "2022" sheet.

'2023'!$B$3:$B$389 - the cell range that the date is being searched on the "2023" sheet.

'2023'!$C$3:$C$389 - the cell range that the data is being pulled from on the "2023" sheet.

Thank you in advance.

Hi!

Here is the article that may be helpful to you: VLOOKUP with IF statement in Excel. Instead of the VLOOKUP function, you can use INDEX+MATCH in the formulas from this article.

I hope it’ll be helpful.

I need to count the number of sales orders where the pallet quantity is greater than 21. The same sales order number can appear on multiple rows, and the pallet count is tied to each line. In my formula it isn't summing up pallet quantity if a sales order appears multiple times. Assuming I need some sort of combo of count and sum?

Criteria: Count # of sales orders where (Customer = Mike) (Sum of Pallet quantity >=22) (Package Type = Case)

Desired result: 2

Current Formula =COUNT(FILTER(SalesOrderNumber!A:A,( (Package Type!C:C="Case")*(Customer!E:E="Mike")*(Pallet Quantity!D:D>=22) )))

SalesOrderNumber ItemNumber Package Type Pallet Quantity Customer

16590 14590056 Drum 23 Amy

17950 14590033 Case 23 Mike

17806 33202332 Case 10 Mike

18900 33202332 Case 11 Mike

18900 33202332 Case 11 Mike

Hello!

According to the data and conditions you specified, the result cannot be equal to 2. Here is the SUMPRODUCT formula for calculating according to your criteria

=SUMPRODUCT(--(E2:E6="Mike"),--(D2:D6>=22),--(C2:C6="Case"))

Result = 1.

Thank you for this great article! Is there a way to pull data from a different column if the formula wasn't able to find anything on the original column? ie. if 'Device List'!E2:E190=0, pull data from 'Device List'!F2:F190 instead?

=INDEX('Device List'!E2:E190,MATCH('User Details'!A2&'User Details'!D2,'Device List'!H2:H190&'Device List'!K2:K190,0))

Thank you!

Hello!

I recommend reading this guide: VLOOKUP with IF statement in Excel.

Hope you’ll find this information helpful.

Thank you, Alexander! This was exactly what I needed to be able to select data from one of multiple columns based on two values in the column headers.

Happy 2022 to you Ablebits team!

I have the following formula:

=IFERROR(INDEX(DATA!$A$2:$A$100,SMALL(IF(DATA!$D$2:$D$100"",ROW(DATA!$A$2:$A$100)-ROW(DATA!$A$2)+1,""),ROW(1:1))),"")

This finds the first entry from column A that does not have a blank entry in column D and returns the value before moving to the next row.

What I would like to do is add a second check into this based on 4 letters (such as "ABCD" or "TFSF") and for some reason I can't get the INDEX MATCH to work correctly.

The DATA sheet is an separate indexed sheet that parses data from a third sheet with merged cells.

Basically, find first number with blank in in column D in the DATA sheet that also has ABCD in Column C then go to the next row.

thanks for any help on this!

Hi!

It is very difficult to understand a formula that contains unique references to your workbook worksheets. Unfortunately, without seeing your data it is difficult to give you any advice.

Is it possible to use match for partial matches in a string in this kind of formula? for example i would want to match for a cell that matches an "ABC" into an array that would have a cell matching with ABC-XXXX. So the match is only partial. I tried using &"*" and they are giving me #ref

thank you so much.

Hello!

To find a partial match of the text, use the SEARCH function.

Here's an example of a formula:

=INDEX(A1:A10,MATCH(TRUE,ISNUMBER(SEARCH("ABC",A1:A10)),0))

Hope this is what you need.

How does the formula work with multiple conditions on both X and Y matches?

Hi!

Have you tried the ways described in this blog post? If they don’t work for you, then please describe your task in detail, I’ll try to suggest a solution.

Hi Alex,

I am trying to apply the formula in the example above but with additional criteria of selecting the maximum value. For instance, If C5 is replaced with Apples, what formula would give G4 as $130

Hello!

To find the maximum value with multiple criteria, use the MAXIFS function.

If you need any further assistance, please don’t hesitate to ask.

Hello

I am having trouble applying this. I am trying to match a row of data from one sheet to match the exact set of variables from another sheet and pick up the 8th entry associated with it, the order amount.

For example I want to find the entry that matches exactly these details from sheet1 in sheet 2 and where they match exactly pick up the order amount indicated in sheet 2. These are columns and rows. So if the entry I am looking at is "Sheet1!A3:G3" and looking for this exact entry in "Sheet2!"A1:G1000". Lets say they match on row 15 of sheet 2 then I want to pick up the entry in "Sheet2!H15

Sheet1 1 entry

product, weight, type, grower, supplier, available, price, order

zucchini, 8kg, box, organic, vikram, yes, 30, (information needed)

Sheet 2

product, weight, type, grower, supplier, available, price, order

zucchini, 8kg, box, organic, vikram, yes, 30, 3

So I want to pick up the order amount of 3 from Sheet2 using this approach.

Ive tried but am not getting it right. Could you please help me?

Thanks very much,

Warm regards

Nicholas

Hello!

You can use something like this:

=INDEX('Sheet1 (2)'!H2:H10,MATCH(1,(Sheet1!A2='Sheet1 (2)'!A2:A10)*(Sheet1!B2='Sheet1 (2)'!B2:B10),0))

I only used 2 conditions. You can find examples and detailed instructions in this article above.

I hope it’ll be helpful.

Hi Alexander,

This article has been super helpful for a novice like myself! I have a question, I'm trying to create a formula for determining the shortest distance between two zip codes and I have the table set up in a matrix. How would I go about pulling in the lowest number with the table looking like this below?

For 21607, 21640, 21864 - I would need a formula to determine which number in each row is the lowest. Thank you in advance.

12110 87110 18034 50010

21607 272 374 100 950

21640 274 522 105 955

21864 336 487 170 999

Hello!

To find the smallest number, use the MIN function.

The Matrix lookup with multiple criteria - formula example really helped me a lot. However, I also want to get the sum of multiple cells based from the criteria. How can i incorporate to get the sum of values? or should i use sumifs instead? Hope to hear from you the soonest. Thanks!

Hello!

The SUMIFS function cannot always be used for a sum with criteria. To give you advice, you need a detailed description of the task.

Here are my criteria:

1. Interval: from Interval 1 to 288

2. Plant: Plant 1, 2, 3 (this is the criteria I want to sum the values, there are duplicate plants in a day)

Date:

Below is the data were I get the values applying Matrix lookup with multiple criteria:

Interval 7/26/2020 7/26/2020 7/27/2020 7/27/2020 7/28/2020 7/28/2020 7/28/2020

(every 5mins.) Plant 2 Plant 1 Plant 1 Plant 1 Plant 2 Plant 3 Plant 1

1 0 0.0517 0 0.0532 0 0 0.0530

2 0 0.0522 0 0.0521 0 0 0.0532

3 0 0.0514 0 0.0523 0 0 0.0529

4 0 0.0519 0 0.0522 0 0 0.0531

5 0 0.0515 0 0.0518 0 0 0.0532

.

.

288

I have used the matrix lookup with multiple criteria. However, INDEX is a lookup function and will only ever return a value from a single cell. Though the values are 0, I want to get the sum of the plants for every date and interval..

Here is my formula:

=IFERROR(INDEX('Plant A'!$C$6:$BV$293,MATCH('Summary_Plant A'!C6,'Plant A'!$B$6:$B$293,0),MATCH('Summary_Plant A'!B6&'Summary_Plant A'!$D$5,'Plant A'!$C$4:$BV$4&'Plant A'!$C$5:$BV$5,0)),0)

I did try to add a sum function but the result if not zero (no value), wrong result, #value or no change in the result. How can I incorporate sum/sumif/sumifs function in the formula? I am also wondering if I should use the sumifs function instead of the index-match? need your assistance to create the correct formula. Hope the sample above helps to visualize the task. Thank you.

Hello!

If I understand your task correctly, the following formula should work for you:

=SUMPRODUCT(B3:H100*(B1:H1=K1)*(B2:H2=L1))

K1 - date

L1 - plant

Hello,

The formula worked well. Thank you for your prompt assistance!

I am trying to figure out how to use this to match 2 criteria, with index returning the max value of the second criteria. The data is formatted in 3 columns:

Column A - Employee name

Column B - Manager name

Column C - Date assigned to that manager

An employee may have multiple records in the table if they were under different managers at different times.

I want to determine the name of the manager the employee was assigned to on a specific date. So, I want to match the employee's name with Column A, then find the max date that is after my search date - and return the manager's name.

For example, if my data looked like this:

Employee A -- Manager Z -- 1/1/2008

Employee A -- Manager Y -- 8/1/2015

Employee A -- Manager X -- 11/28/2018

I want to be able to search for Employee A on an arbitrary date, let's say 12/25/2017 - and get the answer back of Manager Y

Although ideally the data would always be arranged in chronological order where the last matching result would be the correct one, I'd like the formula not to depend on that if possible since I'm not the only one entering data in the table!

For reference, this is what I have so far, but it's not working:

EmpTable has 3 columns: Employee -- Manager -- Assigned Date

My jobs table, where I'm trying to put this formula, has columns for Employee and JobDate

=INDEX(EmpTable[Manager],MATCH(1,([@Employee]=EmpTable[Employee])*([@JobDate]>=EmpTable[AssignedDate]),0))

This formula gives me a result of #N/A, even though I'm entering valid search data

I am entering it as an array function using Shift + Ctrl + Enter

I have tried with the non-array formula as well, but no progress. Still no clue how to select the record with the max assigned date, and the formula is still giving me #N/A

=INDEX(EmpTable[Manager],MATCH(1,INDEX(([@Employee]=EmpTable[Employee])*([@JobDate]>=EmpTable[AssignedDate]),0,1),0))

Hi!

Please check out the following article on our blog, it’ll be sure to help you with your task: INDEX MATCH to lookup multiple criteria

Hi, is it possible to drag one of the 1st 2 formulas into other rows of the sheet? I tried it but it seems like it didn't work.

I have a column where each cell needs to have the formula applied. It does work on a single cell but not when I try to drag the formula to the other rows of the same column. Thanks again.

Hello!

You have not described what the problem is. But I think this article will be helpful: How to copy formula in Excel with or without changing references.

If this is not what you wanted, please describe the problem in more detail.

Sorry for the confusion but thanks I found what was wrong. The formula does work when dragging it down the column. Thanks again.

great example, thank you for information,

however can we place more than 3 criterias for the index-match formula? index(match(criteria1),(criteria2),(criteria3),(criteria4),etc

Hi!

You can add any number of criteria to the formulas described in this article.

Hello,

I am trying to figure out how to utilize 3 criteria to pull a count from a table array. The fields in the table needing to be used Keyed By, Time Elapsed, and Date. Each of these fields can have multiples of the same name, time elapsed, and date. My goal is to count the amount of times the keyed by rep has exceeded this time elapsed goal on a specific day which is just going to be entered in a Date cell. I believe I need to use countifs and index match but struggling to figure out how to enter the function.

Thanks,

James

Hi, I would like to use this index and match formula with a minimum formula as well. So i have to match on multiple criterea. I have tried to explain below, I need the return to match the name and the closest no.

name no. name no. return

x 5 x 4 5

y 5 x 8 10

x 10

That table got messed up

x 5 x 4 5

y 10 x 8 10

x 10

Need help to convert multiple row into multiple column by using index formula.

My data is

1 a

1 b

1 c

2 a

2 b

2 c

3 a

3 b

3 c

3 d

3 e

4 a

4 b

4 c

5 a

5 b

then the output will be.

1 a b c d

2 a b c

3 a b c d e

4 a b c

5 a b

Hello!

You can find the examples and detailed instructions here: Vlookup multiple matches and return results in a row.

I hope this will help, otherwise please do not hesitate to contact me anytime.

Hi Viki,

Your task can also be accomplished with our Ultimate Suite:

- First, you run Merge Duplicates Wizard to merge duplicates into one cell by the 1st key column. For the delimiter, use a character that is not present anywhere in your data.

- Then, you use the Split Text tool to split the merged values into multiple columns.

Thanks, that was driving me nuts!

I'm looking to return a 3rd value based on if two cells each meet certain criteria. For example, (in a real estate context), if anything in column A = "1 BR/1 BA" and anything in column B = 30%, return the value in column C associated with 1 BR/1 BA and 30%. The closest I've gotten so far is with the following formula:

=INDEX(B5:B19, MATCH("1 BR/1 BA, C5:C19,0)*MATCH(30%, D5:D19,0))

This has worked in some instances, but not all, and I'm not sure why. Thank you for any assistance you can provide!

Hello!

Read the paragraph above carefully: Non-array INDEX MATCH formula with multiple criteria.

It contains answers to your question.

It is very nice to have this article.

If I have two excel/csv files, can I make a new file to pull the data to it? (the criteria is in A file, the data is in B file)

Thanks.

Hi,

With the INDEX + MATCH functions, you can extract data using multiple files. In this case, you need to use external references.

In this case, all files must be open in Excel.

Stupid web codes...

=@INDEX(H25:N35,IF(B12 < 2.1,1,IF(AND(B12 > =2.1,B12 < 3.1),2,IF(AND(B12 > =3.1,B12 < =4),3,IF(AND(B12 > =4.1,B12 < 5.1),4,IF(AND(B12 > =5.1,B12 < 6.1),5,IF(AND(B12 > =6.1,B12 < 7.1),6,IF(AND(B12 > =7.1,B12 < 8.1),7,IF(AND(B12 > =8.1,B12 < 9.1),8,IF(AND(B12 > =9.1,B12 < 10.1),9,IF(AND(B12 > =10.1,B12 < 11.1),10,IF(AND(B12 > =11.1,B12 < 12.1),11,0))))))))))),IF(B7 < 2501,1,IF(AND(B7 > =2501,B7 < 3001),2,IF(AND(B7 > =3001,B7 < 3501),3,IF(AND(B7 > =3501,B7 < 4001),4,IF(AND(B7 > =4001,B7 < 4501),5,IF(AND(B7 > =4501,B7 < 5001),6,IF(AND(B7 > =5001,B7 < 5501),7))))))))

I am trying to get a value returned based on a table of information with ranges. Below is the table I am working with. It is the bags requirements for a house foundation based on the square footage of the house slab, and the average height of the slab. I want to be able to return a value based on the two separate inputs and return the correct row and column.

Example: the house slab is 3073 sf (this is B7 in the spreadsheet) and the average height is 4.08 ft (this is B12 in the spreadsheet). That should come out to be 15 (third column, fourth row).

Height 2000-2500 2500-3000 3000-3500 3500-4000 4000-4500 4500-5000 5000-5500

1.0-2.0 8 9 12 14 15 16 17

2.0-3.0 9 11 13 15 16 17 19

3.0-4.0 10 13 14 15 17 19 20

4.0-5.0 11 14 15 16 19 20 22

5.0-6.0 12 15 16 17 20 22 22

6.0-7.0 13 16 17 18 22 22 23

7.0-8.0 15 17 18 19 22 23 24

8.0-9.0 16 18 19 19 23 24 26

9.0-10.0 17 19 20 20 24 26 26

10.0-11.0 18 20 21 22 26 26 27

11.0-12.0 19 21 22 22 26 27 28

Note: The table in my worksheet spans G24:N35

The problem I am getting into is that I don't have specific values I am checking for along the rows and columns, but ranges in both. The current formula I have is below, but I am getting a #VALUE! error due to the 4.08 average height getting missed in my formula. Is there a better way to format this formula to manage all the ranges of the two values I am needing to check in the table or am I really stuck with all the nested IF's?

=@INDEX(H25:N35,IF(B12=2.1,B12=3.1,B12=4.1,B12=5.1,B12=6.1,B12=7.1,B12=8.1,B12=9.1,B12=10.1,B12=11.1,B12<12.1),11,0))))))))))),IF(B7=2501,B7=3001,B7=3501,B7=4001,B7=4501,B7=5001,B7<5501),7))))))))

Hmm, the comment formatting broke my formula...that's not what it's suppose to read as. Maybe this will work.

=@INDEX(H25:N35, IF(B12=2.1 , B12=3.1 , B12=4.1 , B12=5.1 , B12=6.1 , B12=7.1 , B12=8.1 , B12=9.1 , B12=10.1 , B12=11.1 , B12<12.1) , 11 , 0))))))))))) , IF(B7=2501 , B7=3001 , B7=3501 , B7=4001 , B7=4501 , B7=5001 , B7<5501) , 7))))))))

Hello!

Write the first line as 2000 2500 3000 etc.

Write the first column as 1 2 3 4 5, etc. If 4.08 is written in I1, in 3072 it is written in I2, then you can use the formula

=VLOOKUP(I1, A2:H12, MATCH(I2, A1:H1, 1), 1)

Please check out this article to learn how to Vlookup based on row and column values.

I hope I answered your question. If something is still unclear, please feel free to ask.

Much cleaner formula. Works perfectly, thanks!

Excellent explanation and detail - thank you for posting!

Hi, I have 2 columns that has Performance rating of 2 years. Say,

Column A = 2 Column B =1 column C: an amount 3000 This will be in different combinations like, 1,2, 1,3, 2,1 etc for different employees

I need to calculate :

If column a=1, column b=2, then it should fetch Column C *2+200

If column a=2, column c=3, then it should fetch column C* 0.5+ 300

Similarly, different combinations of ratings for 2 years should fetch a value where different formulas are applied. How do I do that?

Hello!

Here is the article that may be helpful to you:

Nested IF formulas and

New Excel IFS function instead of multiple IF

I hope it’ll be helpful.