# VLOOKUP multiple results (Custom Function)

#### z3115

##### Board Regular
I'm hoping I can create a custom function to help me with a tricky Vlookup type problem:

Let's say my vlookup should return the color of a fruit. I have a table on a hidden sheet that has each fruit with it's corresponding color.

On another sheet, in cell A1 I have multiple fruit separated by commas (e.g. apple, banana, grape).

A vlookup on apple returns "red", a vlookup on banana returns "yellow", etc. What I need is a formula that takes cell A1 as the input and outputs "Red, Yellow, Purple". (basically taking each component of the input cell, running a vlookup on it, and concatenating all results at the end, separated by commas). Also, the number of items in the input cell may vary (in my example there are 3 fruits but it could range from 0 to 6).

Is there ANY sort of way to do this? I know it's sort of weird and specific, but it would help me tremendously. Thanks!

#### DRSteele

##### Well-known Member
You will need Excel 2016 for this to work because function TEXTJOIN is new; it was designed to do exactly what you ask: take each component of the input cell and concatenate all results at the end, separated by commas. F2 through G6 is the reference table.

Sources:
https://superuser.com/questions/483419/how-to-split-a-string-based-on-in-ms-excel

BCDEFG
1in this text stringcolour lookup
2apple, banana, grapered, yellow, purplefruitcolour
3banana,yellowapplered
4grapepurplebananayellow
5grape, applepurple, redgrapepurple
6banana, grapeyellow, purplekiwigreen
7kiwi, applegreen, red
8banana, kiwi,yellow, green

</tbody>
Sheet58

Array Formulas
CellFormula
C2{=TEXTJOIN(", ",1,IFNA(INDEX(\$G\$3:\$G\$6,N(IF(1,MATCH(TRIM(MID(SUBSTITUTE(\$B2,",",REPT(" ",999)),ROW(INDIRECT("1:"&100))*999-998,999)),\$F\$3:\$F\$6,0)))),""))}

</tbody>
Entered with Ctrl+Shift+Enter. If entered correctly, Excel will surround with curly braces {}.
Note: Do not try and enter the {} manually yourself

<tbody>
</tbody>

Last edited:

#### z3115

##### Board Regular
This is perfect! One small adjustment, is there any way to ensure the output cell does not list the same color twice? For example, if the input cell is "Apple, Cherry", can the output say "Red" instead of "Red, Red"? Thanks!

You will need Excel 2016 for this to work because function TEXTJOIN is new; it was designed to do exactly what you ask: take each component of the input cell and concatenate all results at the end, separated by commas. F2 through G6 is the reference table.

Sources:
https://superuser.com/questions/483419/how-to-split-a-string-based-on-in-ms-excel

BCDEFG
1in this text stringcolour lookup
2apple, banana, grapered, yellow, purplefruitcolour
3banana,yellowapplered
4grapepurplebananayellow
5grape, applepurple, redgrapepurple
6banana, grapeyellow, purplekiwigreen
7kiwi, applegreen, red
8banana, kiwi,yellow, green

<tbody>
</tbody>
Sheet58

Array Formulas
CellFormula
C2{=TEXTJOIN(", ",1,IFNA(INDEX(\$G\$3:\$G\$6,N(IF(1,MATCH(TRIM(MID(SUBSTITUTE(\$B2,",",REPT(" ",999)),ROW(INDIRECT("1:"&100))*999-998,999)),\$F\$3:\$F\$6,0)))),""))}

<tbody>
</tbody>
Entered with Ctrl+Shift+Enter. If entered correctly, Excel will surround with curly braces {}.
Note: Do not try and enter the {} manually yourself

<tbody>
</tbody>

#### DRSteele

##### Well-known Member
I have no idea how we can extract a unique list of Colours.

Perhaps you could use a thesaurus to come up with more colours than just "red" - how bout crimson, cardinal, maroon, scarlet? Then again, I have a feeling your actual data has nothing to do with fruits and their hues.

#### z3115

##### Board Regular
I have no idea how we can extract a unique list of Colours.

Perhaps you could use a thesaurus to come up with more colours than just "red" - how bout crimson, cardinal, maroon, scarlet? Then again, I have a feeling your actual data has nothing to do with fruits and their hues.
Haha you are correct. It's actually for listing teams that are working on a task based on the people assigned to that task. So one column might say "Bob, Steve, Pete" are working on a task, then the next column auto-populated the teams involved based on the teams that Bob, Steve, and Pete belong to. However, if Bob and Steve are both on the HR team I don't want the new column to say "HR, HR", I just want HR listed once.

Thank you for your help though!

#### FormR

##### MrExcel MVP
Hi, here is a UDF that you can try;

To use:
2. Click "Insert" > "Module" on the menu bar.
3. Copy and paste the code below into the blank window on the top right hand side.
4. Press ALT+Q to close the VBE
5. Save your workbook as a macro enabled workbook (xlsm)
6. Use just like any another worksheet function as demonstrated below.

Code:
``````Function MLookUp(lkup, tbl As Range, col As Long)
Dim a, b
With CreateObject("Scripting.Dictionary")
.CompareMode = vbTextCompare
For Each a In Split(lkup, ",")
b = Application.VLookup(Trim(a), tbl, col, 0)
If Not IsError(b) Then
If Not .exists(b) Then .Add b, 1
End If
Next a
MLookUp = Join(.keys, ", ")
End With
End Function``````

#### z3115

##### Board Regular
Thank you so much! This is perfect.

Hi, here is a UDF that you can try;

To use:
2. Click "Insert" > "Module" on the menu bar.
3. Copy and paste the code below into the blank window on the top right hand side.
4. Press ALT+Q to close the VBE
5. Save your workbook as a macro enabled workbook (xlsm)
6. Use just like any another worksheet function as demonstrated below.

Code:
``````Function MLookUp(lkup, tbl As Range, col As Long)
Dim a, b
With CreateObject("Scripting.Dictionary")
.CompareMode = vbTextCompare
For Each a In Split(lkup, ",")
b = Application.VLookup(Trim(a), tbl, col, 0)
If Not IsError(b) Then
If Not .exists(b) Then .Add b, 1
End If
Next a
MLookUp = Join(.keys, ", ")
End With
End Function``````
Excel 2013/2016
ABCDE
1in this text stringcolour lookupfruitcolour
2apple, banana, grapered, yellow, purpleapplered
3bananayellowCherryred
4grapepurplebananayellow
5grape, applepurple, redgrapepurple
6Apple, Cherry, Bananared, yellowkiwigreen
7banana, grapeyellow, purple
8kiwi, applegreen, red
9banana, kiwiyellow, green

</tbody>
Sheet1

Worksheet Formulas
CellFormula
B2=MLookUp(A2,\$D\$1:\$E\$6,2)

</tbody>

<tbody>
</tbody>

#### Juliemax

##### New Member
I tried to use this vba code but using numbers instead of colors. And if the numbers is same it doesn't appear. I think it does not allow repitition. I need help :/

#### FormR

##### MrExcel MVP
I tried to use this vba code but using numbers instead of colors.
Hi, welcome to the forum.

Try to post a small example of what you are looking up, the lookup table and what your expected results are for said example.

#### DRSteele

##### Well-known Member
Well, patience is a virtue. Excel has created a whole host of new functions along with a new calculation engine, spilled arrays and dynamic arrays. You need Excel 365 Insider for the new function UNIQUE to work right here, and you won't need Ctrl+Shift+Enter to invoke it. As far as I understand, in Spring 2019 MS will release this new calculation engine to all users.

This formula is the above one simply amended with a new function, UNIQUE. It will lookup all the fruits and return all the unique colours.

Code:
``[FONT=Verdana,Arial,Tahoma,Calibri,Geneva,sans-serif]=TEXTJOIN(", ",1,[COLOR=#0000cd]UNIQUE[/COLOR](IFNA(INDEX(\$G\$3:\$G\$6,N(IF(1,MATCH(TRIM(MID(SUBSTITUTE(\$B9,",",REPT(" ",999)),ROW(INDIRECT("1:"&100))*999-998,999)),\$F\$3:\$F\$6,0)))),"")))[/FONT]``

1,081,423
Messages
5,358,595
Members
400,505
Latest member
JacquiT

### This Week's Hot Topics

• VBA (Userform)
Hi All, I just would like to know why my code isn't working. Here is my VBA code: [CODE=vba]Private Sub OKButton_Click() Dim i As Integer...
• List box that changes fill color
Hello, I have gone through so many pages trying to figure this out. I have a 2020 calendar that depending on the day needs to have a certain...
• Remove duplicates and retain one. Cross-linked cases
Hi all I ran out of google keywords to use and still couldn't find a reference how to achieve the results of a single count. It would be great if...
• VBA Copy and Paste With Duplicates
Hello All, I'm in need of some input. My VBA skills are sub-par at best. I've assembled this code from basic research and it works but is...
• Macro
is it possible for a macro to run if the active cell value is different to the value above it
• IF DATE and TIME
I currently use this to check if date has passed but i also need to set a time on it too. Is it possible? [CODE=vba]=IF(B:B>TODAY(),"Not...