This uses VBA ... a borrowed User defined function by tigeravatar called Concatall.
This is the code.
'tigeravatar ExcelForum
Public Function ConcatAll(ByVal varData As Variant, Optional ByVal sDelimiter As String = vbNullString, Optional ByVal bUnique As Boolean = False) As String
'Created by TigerAvatar at www.excelforum.com, September 2012
'Purpose is to concatenate many strings into a single string
'Can be used with arrays, range objects, and collections
Dim DataIndex As Variant 'Used to loop through arrays, range objects, and collections
Dim strResult As String 'Used to build the result string
'Test if varData is an Array, Range, or Collection
If IsArray(varData) _
Or TypeOf varData Is Range _
Or TypeOf varData Is Collection Then
'Found to be an, array, range object, or collection
'Loop through each item in varData
For Each DataIndex In varData
'Check if the item isn't empty
If Len(DataIndex) > 0 Then
'Found the item isn't empty, check if user specified bUnique as True
If bUnique = True Then
'bUnique is true, check if the item has been included in the result yet
If InStr(1, "||" & strResult & "||", "||" & DataIndex & "||", vbTextCompare) = 0 Then
'Item has not been included in the result, add item to the result
strResult = strResult & "||" & DataIndex
End If
Else
'bUnique is not true, add item to the result
strResult = strResult & "||" & DataIndex
End If
End If
Next DataIndex
'Correct strResult to remove beginning delimiter and convert "||" to the specified sDelimiter
strResult = Replace(Mid(strResult, 3), "||", sDelimiter)
Else
'Found not to be an array, range object, or collection
'Simply set the result = varData
strResult = varData
End If
'Output result
ConcatAll = strResult
End Function
How to install your new code
- Copy the Excel VBA code
- Select the workbook in which you want to store the Excel VBA code
- Press Alt+F11 to open the Visual Basic Editor
- Choose Insert > Module
- Edit > Paste the code into the module that appeared
- Close the VBEditor
- Save your workbook (Excel 2007+ select a macro-enabled file format, like *.xlsm)
The lookup table for IDs is sorted ascending by country.
Then array enter this formula in C2 and fill down. If you aren’t familiar with array-entered formulas array enter means the formula must be committed from edit mode by simultaneously pressing and holding down Ctrl and Shift while hitting Enter.
Formula:
=concatall(LOOKUP(TRIM(MID(SUBSTITUTE(B2,",",REPT(" ",LEN(B2))),(ROW(INDIRECT("1:"&LEN(B2)-
LEN(SUBSTITUTE(B2,",",""))+1))-1)*LEN(B2)+1,LEN(B2))),$G$2:$H$7),",")
|
A |
B |
C |
D |
E |
F |
G |
H |
1 |
User |
Country |
|
|
|
|
Country |
Country ID |
2 |
John |
America,Europe,Japan |
001,002,003 |
|
|
|
America |
001 |
3 |
Mark |
America |
001 |
|
|
|
Australia |
006 |
4 |
Sarah |
Japan,India |
003,004 |
|
|
|
Europe |
002 |
5 |
Alex |
India,Ireland |
004,005 |
|
|
|
India |
004 |
6 |
Steve |
Australia |
006 |
|
|
|
Ireland |
005 |
7 |
|
|
|
|
|
|
Japan |
003 |
Bookmarks