2D Lookup — INDEX and MATCH or XLOOKUP functions

How to do a 2D Lookup in Excel? Let’s start.

2D Lookup | Excel Tips 68

When we want to find an inter­sec­tion between a row and a col­umn bas­ing on head­ers, we can do it in two dif­fer­ent ways. The first one will be in Lega­cy Excel, and the sec­ond in Dynam­ic Array Excel.

The first solu­tion uses the MATCH func­tion as well as its close friend, the INDEX function. 

Let’s start with look­ing for the coun­try. In this case we want to find the row num­ber. Let’s write the cell, the range where we will be look­ing for and 0 for an exact match (Fig. 1)

=MATCH(B8,A3:A6,0)

MATCH function for countries
Fig. 1 MATCH func­tion for countries

We also want to find the col­umn num­ber. In this case we also use the MATCH func­tion. Let’s the cell, the range where we will be look­ing for and 0 for an exact match (Fig. 2)

=MATCH(B9,B2:G2,0)

MATCH function for months
Fig. 2 MATCH func­tion for months

When we have our row and col­umn num­bers, we can use the INDEX func­tion, select the whole dataset, then write the row and col­umn num­bers (Fig. 3)

=INDEX(B3:G6,D8,D9)

INDEX function
Fig. 3 INDEX function

Just like that, we did the 2D lookup, or we have found the val­ues we want­ed (Fig. 4)

Results
Fig. 4 Results

So far, we have had three for­mu­las. If we want to have only one, we need to imple­ment some mod­i­fi­ca­tions. We have to copy our MATCH func­tion and paste it in the place refer­ring to cell D8. Then, we have to copy the sec­ond MATCH func­tion with­out the equal sign, and paste it in the place of the ref­er­ence to cell D9. Now, we have one, big­ger for­mu­la instead of three small­er ones (Fig. 5)

=INDEX(B3:G6,MATCH(B8,A3:A6,0),MATCH(B9,B2:G2,0))

One, big formula
Fig. 5 One, big formula

Now, let’s focus on the solu­tion in the Array Excel. We will be using here the XLOOKUP func­tion twice. 

First, we are look­ing for a row in the coun­try head­ers. Then, as a return­ing array, we give Excel the whole dataset (Fig. 6)

=XLOOKUP(B8,A3:A6,B3:G6)

 XLOOKUP function
Fig. 6 XLOOKUP function

Since I’m using the XLOOKUP func­tion, and we are work­ing in the Array Excel, Excel will return the whole row. 

In such a case, we have to find a prop­er col­umn. We can also do it with the XLOOKUP func­tion. Let’s write the XLOOKUP func­tion once again. This time we will be look­ing for a month in the month head­ers. As a return array, we have the row we found pre­vi­ous­ly (Fig. 7)

=XLOOKUP(B9,B2:G2,XLOOKUP(B8,A3:A6,B3:G6))

Another XLOOKUP function
Fig. 7 Anoth­er XLOOKUP function 

And just like that, we have our results (Fig. 8)

Results
Fig. 8 Results

Even if we change the val­ues in our for­mu­la, the result is still cor­rect (Fig. 9)

Checking the formula
Fig. 9 Check­ing the formula

The results are cor­rect both in XLOOKUPs and INDEX with MATCH functions. 

https://www.youtube.com/watch?v=fZqiVB3Vffw

SORT by months using functions

Today, we want to learn about sort­ing by months with the SORT function. 

SORT by months using functions

Let’s start with writ­ing the SORT func­tion, with an array as the first argu­ment. In the sec­ond argu­ment we need to write 2, as we want to sort by months, which are locat­ed in the sec­ond col­umn. Now, we can close the func­tion (Fig. 1). 

=SORT(A2:C145,2)

SORT function
Fig. 1 SORT function

Just like that the SORT func­tion sort­ed data by the Month col­umn. It’s impor­tant that the SORT func­tion does­n’t con­sid­er the cus­tom list. Excel does it, but the SORT func­tion does­n’t. Now. let’s have a look at how we can prop­er­ly sort by months using the SORT func­tion. First of all, we can­not use the SORT func­tion, but the SORTBY func­tion. In this func­tion, even if we change the sec­ond argu­ment to a month col­umn, we still get an ascend­ing sort­ing, from A to Z. It means that the sort­ing is based on the alpha­bet, not on months of the year. The thing is we can­not do the sort­ing based on argu­ments. We need to use the MATCH func­tion. It will look up a giv­en month in a list of months. In the third argu­ment we write 0, as we want to have the exact match (Fig. 2)

=MATCH(B2,$J$2:$J$13,0)

 MATCH function
Fig. 2 MATCH function

The MATCH func­tion starts the sort­ing from the top on the Month col­umn. As we can see in col­umn D, we have a prop­er num­ber for each month. The col­umn acts as a helper col­umn, how­ev­er, some­times we don’t want any helper col­umn, so we can cre­ate a helper col­umn in our for­mu­la. We can match each month from the Month col­umn (col­umn B) using the MATCH func­tion, where we need to write the lookup val­ue in the first argu­ment, which is our data col­umn. In the sec­ond argu­ment, we need to write the whole list of months on the right, then let’s write 0 as the exact match (Fig. 3)

SORTBY(A2:C145,MATCH(B2:B145,J2:J13,0))

SORTBY function
Fig. 3 SORTBY function

It works. We see that the SORTBY func­tion found a prop­er num­bers for each month. It’s impor­tant that it sorts by months, not by years. How­ev­er, we can add the year as well. But, I want to show you some­thing else. First of all, if we don’t like the cus­tom helper col­umn list, we can just click F9 in the lookup array argu­ment to hard code the array list in our for­mu­la (Fig. 4)

=SORTBY(A2,C145,MATCH(B2:B145,{“January”;“February”;“March”;“April”;“May”;“June”;“July”;“August”;“September”;“October”;“November”;“December”},0))

Hard coding month names
Fig. 4 Hard cod­ing month names

We can even delete the cus­tom col­umn. As we can see, it works prop­er­ly. When we look at col­umn D, we can see #N/A error. It’s because the MATCH func­tion is try­ing to find months in the cus­tom col­umn cells which are emp­ty (Fig. 5)

=MATCH(B2,$J$2:$J$13,0)

Empty cells in the Month column
Fig. 5 Emp­ty cells in the Month column 

Now, let’s focus on dates based on years and months. Some­times, our date in a dataset isn’t writ­ten only in one col­umn, but it can be sep­a­rat­ed into the year, month and day columns. We can cre­ate a full date from the data we have. We will try it in the Helper col­umn. First of all, we write =, then 1 com­bined with a month, com­bined with a year (Fig. 6)

=1&B2&A2

Creating a date
Fig. 6 Cre­at­ing a date

And just like that, we com­bined the 1st of Jan­u­ary 2022. Our date, how­ev­er, is text. We want Excel to under­stand it as a date, so we just need to add paren­the­ses and a 0 (Fig. 7)

=(1&B2&A2)+0

Changing text into numbers
Fig. 7 Chang­ing text into numbers

Excel mag­ic has just hap­pened! It changed text into num­bers. Now, to change the num­bers into dates, we need to go to the Home tab (1), then change the for­mat­ting (2) into Short Date (3) (Fig. 8)

Numbers into a date
Fig. 8 Num­bers into a date

Since we have dates based on the year and the month columns, we can sort them. Let’s write the SORTBY func­tion. In the first argu­ment we write the data col­umn, and in the sec­ond col­umn we have to com­bine 1 with the Month col­umn, then with the Year col­umn. When we close the paren­the­ses we need to add 0 to change text val­ues into num­bers (Fig. 9)

=SORTBY(A2:C145,(1&B2:B145&A2:A145)+0)

SORTBY function
Fig. 9 SORTBY function

Now, we have only six Jan­u­ar­ies at the begin­ning, because we have have only six Jan­u­ar­ies in 2022. Next six Jan­u­ar­ies are in 2023. This way we sort­ed our data by months and years using a helper column. 

Compare 2 lists — Legacy Excel classic formulas

Today, we want to com­pare two lists and find ele­ments that are on both lists as well as on only one. 

Com­pare 2 lists clas­sic for­mu­las Lega­cy Excel

We are going to use Clas­sic Excel, Lega­cy Excel and a clas­sic for­mu­la with the AGGREGATE func­tion. It means that this for­mu­la will work from 2010 and thanks to this, we won’t need to use the Crtl + Shift + Enter key combination.

Let’s start with find­ing ele­ments. We will be check­ing whether ele­ments from My son’s favorite movies list are on My daugh­ter’s favorite movies list. We can use the MATCH func­tion here. We are look­ing up ele­ments from my son’s list (list B) on my daugh­ter’s list (list A). We’re click­ing F4 key to lock both lists. Then we write zero to have the exact match and that’s it (Fig. 1)

=MATCH($C$2:$C$9,$A$2:$A$11,0)

MATCH function
Fig. 1 MATCH function

Excel has just giv­en us the results. I have the Dynam­ic Array Excel, which means that Excel spilled the results. We can see that How to train a Drag­on is in list B with num­ber 5 which means that it’s on posi­tion num­ber 5 in list A. We also have Spi­der-man on posi­tion num­ber 7. If we want to extract those num­bers, we have to use the AGGREGATE func­tion. In the first argu­ment of the func­tion, we have to use a func­tion num­ber 15, as this func­tion under­stands an array for­mu­la. Then, in the sec­ond argu­ment, we have to write 6 to ignore errors. At the end, in the k argu­ment let’s write ROWS from E2 to E2 and press F4 key to lock only the first one. This will allow the for­mu­la to expand while copy­ing down (Fig. 2)

=AGGREGATE(15,6,MATCH($C$2:$C$9,$A$2:$A$11,0),ROWS($E$2,E2))

AGGREGATE function
Fig. 2 AGGREGATE function

Now, we have the results, how­ev­er there are some errors. To remove that, we can add the INDEX func­tion and write list A in the first argu­ment, then press F4 key to lock it (Fig. 3)

=INDEX($A$11:$A$11,AGGREGATE(15,6,MATCH($C$2:$C$9,$A$2:$A$11,0),ROWS($E$2,E2))

INDEX function
Fig. 3 INDEX function

Now, we have the ele­ments that are on both lists. We can remove the errors. Let’s add the IFERROR func­tion (Fig. 4)

=IFERROR(INDEX($A$11:$A$11,AGGREGATE(15,6,MATCH($C$2:$C$9,$A$2:$A$11,0),ROWS($E$2,E2))),“”)

IFERROR function
Fig. 4 IFERROR function

We have our results in the tar­get list, and there is still some back­up space in case we have some more results (Fig. 5)

Results with extra space
Fig. 5 Results with extra space

Now, we can cre­ate a for­mu­la that will look up ele­ments only from list B. Let’s start with giv­ing each ele­ment a num­ber. We’ll use the ROW func­tion here and write the whole list as the first argu­ment. Then F4 key to lock it (Fig. 6)

=ROW($C$2:$C$9)

ROW function
Fig. 6 ROW function

As we can see, Excel has spilled the results and each ele­ment has got its own num­ber. How­ev­er, we want to start from 1, not from 2 (Fig. 7)

Numbers for each element
Fig. 7 Num­bers for each element

To do this, we have to sub­tract the head­er row and press F4 key to lock it (Fig. 8)

=ROW($C$2:$C$9)-ROW($C$1)

Subtracting the header row
Fig. 8 Sub­tract­ing the head­er row

And we have all ele­ments num­bered from 1 to 8. Now, we want only num­bers of ele­ments that aren’t on list A. How can we do it? We can divide our list by the MATCH func­tion. In the first argu­ment, we write list B and press F4 key to lock it, then list A in the sec­ond argu­ment, as that’s the place where we will be look­ing up our val­ues. Then F4 key. As the final step, we write 0, as we want to have the exact match and the look­ing up process will start from the top (Fig. 9)

=(ROW($C$2:$C$9)-ROW($C$1))/MATCH($C$2:$C$9,$A$2:$A$11,0)

Dividing the list
Fig. 9 Divid­ing the list

Just like that we have num­bers only on those posi­tions that are on both lists. How­ev­er, we want a reverse sit­u­a­tion, where we will have num­bers in #N/A posi­tions. To to that we have to put our MATCH func­tion into the ISNA func­tion (Fig. 10)

=(ROW($C$2:$C$9)-ROW($C$1))/ISNA(MATCH($C$2:$C$9,$A$2:$A$11,0))

ISNA function
Fig. 10 ISNA function

If the MATCH func­tion returns an error, the ISNA func­tion will change this error into TRUE. And a num­ber divid­ed by the val­ue of TRUE will change the TRUE val­ue into 1. If the ISNA func­tion returns FALSE, the math­e­mat­i­cal oper­a­tion will change FALSE into 0. Since we can­not divide by 0, we will have #DIV/0! errors (Fig. 11)

#DIV/0! errors
Fig. 11 #DIV/0! errors

Since we have a list with num­bers which are the posi­tions of ele­ments we want to extract and errors, it’s time to put our whole for­mu­la into the AGGREGATE func­tion. Just like before, we start from the small­est val­ue, so let’s write 15, then 6, as we want to ignore errors. At the end of our func­tion, we write the ROWS func­tion with G2 cell. Then F4 key to lock the first one (Fig. 12)

=AGGREGATE(15,6,(ROW($C$2:$C$9)-ROW($C$1))/ISNA(MATCH($C$2:$C$9,$A$2:$A$11,0)),ROWS($G$2:G2))

 AGGREGATE function
Fig. 12 AGGREGATE function

Now, we have posi­tions with­out errors, which means that we can add the INDEX func­tion to our for­mu­la. As we take posi­tions from list B, we have to select the list, then press F4 key to lock it (Fig. 13)

INDEX function
Fig. 13 INDEX function

After press­ing Enter, or Ctrl + Enter, we have our results. Now, we can add the IFERROR func­tion to put emp­ty text strings in the places where the for­mu­la returns errors (Fig. 14)

=IFERROR(AGGREGATE(15,6,(ROW($C$2:$C$9)-ROW($C$1))/ISNA(MATCH($C$2:$C$9,$A$2:$A$11,0)),ROWS($G$2:G2)),“”)

IFERROR function
Fig. 14 IFERROR function

And we have our results (Fig. 15)

Results
Fig. 15 Results

This way, we have two for­mu­las. The first one to extract ele­ments that are on both lists, and the sec­ond one to extract ele­ments that are only on one list. 

https://www.youtube.com/watch?v=gb7zo6lPZSs&t

Compare 2 lists — Dynamic Array formula

Today, we want to com­pare two lists. Being more pre­cise, we want to find ele­ments that are on both lists, as well as ele­ments that are only on one list. 

Com­pare 2 lists dynam­ic array formula

This time, we will use Dynam­ic Array for­mu­las. It makes the oper­a­tion eas­i­er than using Lega­cy Excel formulas. 

We’re start­ing with the XMATCH func­tion. In the first two argu­ments, we write a list of ele­ments that we are look­ing for, and the list that those ele­ments are looked up in (Fig. 1)

=XMATCH(C2:C9,A2:A11)

XMATCH function
Fig. 1 XMATCH function

In the results, we can see that we have #N/A errors in the places where Excel did­n’t find any match, and num­bers where it found the prop­er match (Fig. 2)

Errors and matches
Fig. 2 Errors and matches

Now, we want to extract the val­ues where Excel has found the match. To to this, we can add the ISNUMBER func­tion to the XMATCH func­tion (Fig. 3)

=ISNUMBER(XMATCH(C2:C9,A2:A11))

 ISNUMBER function added to XMATCH function
Fig. 3 ISNUMBER func­tion added to XMATCH function

Now, our results are FALSEs and TRUEs. What we can do now, is add the FILTER func­tion. In the first argu­ment, we have to write the array with ele­ments that we are look­ing for (Fig. 4)

=FILTER(C2:C9, ISNUMBER(XMATCH(C2:C9,A2:A11))

FILTER function
Fig. 4 FILTER function

And we have our results. Now, we want to find ele­ments that are only on the My son’s list. All we need to do, is take the same for­mu­la and change the ISNUMBER func­tion into ISNA func­tion (Fig. 5)

=FILTER(C2:C9, ISNA(XMATCH(C2:C9,A2:A11))

ISNUMBER function into ISNA function
Fig. 5 ISNUMBER func­tion into ISNA function

And just like that we have found ele­ments that are on both lists and ele­ments that are only on one list (Fig. 6)

Results
Fig. 6 Results

https://www.youtube.com/watch?v=I4QYLM7BpfQ

The most frequent text

In the pre­vi­ous post, I was talk­ing about a dom­i­nant, which is the most fre­quent num­ber. Today, we are going to find the most fre­quent text.

Most fre­quent text 

This task is a bit hard­er, because the MODE func­tion that we used pre­vi­ous­ly needs num­bers. It means that we have to con­vert text into num­bers. To do so, we can use the MATCH func­tion. It means that we will be look­ing for our whole text in our whole text. We want the exact match (Fig. 1)

MATCH function to look for the exact match
Fig. MATCH func­tion to look for the exact match

While using the MATCH func­tion, Excel starts cal­cu­la­tions from the top. It means that each pup­py in the range is refer­ring to the first one on the list, which is on the first posi­tion is pre­sent­ed as 1 (Fig. 2)

uppy gets number 1
Fig. 2 Pup­py gets num­ber 1

Look­ing at the sec­ond exam­ple, the first kit­ten is in posi­tion num­ber 2, so each kit­ten will refer to the same num­ber (Fig. 3)

Kitten gets number 2
Fig. 3 Kit­ten gets num­ber 2

Now, that we have our text con­nect­ed to num­bers, we can add the MODE.MULT func­tion to return the most fre­quent num­bers, i.e. posi­tions of text (Fig. 4)

=MODE.MULT(MATCH(A2:A9,A2:A9,0))

 MODE.MULT function to return the most frequent numbers
Fig. 4 MODE.MULT func­tion to return the most fre­quent numbers

And we have the results (Fig. 5)

Results
Fig. 5 Results

Since we have the posi­tions, we can add the INDEX func­tion to return text con­nect­ed to those posi­tions (Fig. 6)

=INDEX(A2:A9,MODE.MULT(MATCH(A2:A9,A2:A9,0)))

INDEX function to return text
Fig. 6 INDEX func­tion to return text

Just like that we have our solu­tions in the Dynam­ic Array Excel (Fig. 7)

Solutions in Dynami Array
Fig. 7 Solu­tions in Dyna­mi Array

In the clas­sic Lega­cy Excel, we should select more cells and use the Ctrl + Shift + Enter key com­bi­na­tion to put our results in all cells (Fig. 8)

Key combination
Fig. 8 Key combination

How­ev­er, we are in DA Excel, so we have a sim­pler solu­tion. At the end, we want to check what hap­pens when the text appears only once in a range. We can see that the MODE.MULT func­tion returns the #N/A error (Fig. 9)

 #N/A error
Fig. 9 #N/A error

When text appears the same num­ber of times, in our case it’s cat and dog, the MODE.MULT func­tion will return those results (Fig. 10)

Results
Fig. 10 Results

https://www.youtube.com/watch?v=MpdrAz_ZNdo