Not using VBA but just simple excel, can anyone help me find a solution to this problem? Would greatly appreciate it!
I have a list of Names in Sheet 1 like below
| - | A |
|---|---|
| 1 | sp_abc_Rick |
| 2 | sp_abc_Jabba_the |
| 3 | sp_abc_Dany |
| 4 | sp_random_Rick |
| 5 | sp_random_Jabba_the |
| 6 | sp_random_Dany |
| 7 | sp_constant |
| 8 | sp_ripley_art_Dany |
| 9 | sp_ripley_art_Jabba_the |
| 10 | sp_wakeup |
I have a list of Mapping Table in Sheet 2 like below
| - | A | B |
|---|---|---|
| 1 | Rick | Morty |
| 2 | Jabba_the | Hutt |
| 3 | Dany | Dragon |
I wish to have a result in Sheet 1, in column B, like below
| - | A | B |
|---|---|---|
| 1 | sp_abc_Rick | sp_abc_Morty |
| 2 | sp_abc_Jabba_the | sp_abc_Hutt |
| 3 | sp_abc_Dany | sp_abc_Dragon |
| 4 | sp_random_Rick | sp_random_Morty |
| 5 | sp_random_Jabba_the | sp_random_Hutt |
| 6 | sp_random_Dany | sp_random_Dragon |
| 7 | sp_constant | sp_constant |
| 8 | sp_ripley_art_Dany | sp_ripley_art_Dragon |
| 9 | sp_ripley_art_Jabba_the | sp_ripley_art_Hutt |
| 10 | sp_wakeup | sp_wakeup |
To give you a context of the number of rows. Sheet 1 will be bigger with more than 1000 rows. Sheet 2 (Mapping Table) is constant set of rows. Currently it is about 100 rows.
CodePudding user response:
You can use a formula like shown below using LOOKUP(), SEARCH() with SUBSTITUTE()
• Formula used in cell B1
=IFERROR(SUBSTITUTE(A1,LOOKUP(9^9,SEARCH($D$1:$D$3,A1),$D$1:$D$3),
LOOKUP(9^9,SEARCH($D$1:$D$3,A1),$E$1:$E$3)),A1)
CodePudding user response:
There you go. There may have other better solution. This is what I got.
All in column B.
=IFERROR(CONCAT(MID(A1,1,MATCH(1,(CODE(MID(A1,ROW($Z$1:$Z$255),1))<90)*(CODE(MID(A1,ROW($Z$1:$Z$255),1))>=65),FALSE)-1),INDIRECT(CONCAT("sheet2!b", MATCH(MID(A1, MATCH(1,(CODE(MID(A1,ROW($Z$1:$Z$255),1))<90)*(CODE(MID(A1,ROW($Z$1:$Z$255),1))>=65),FALSE), LEN(A1)), Sheet2!$A$1:Sheet2!$A$300, 0)))),A1)
Break down is as follow;
Let's start put things from Column C onward.
Column C, to find the index of the first capital letter from the text.
ref: 
Formula in B1:
=BYROW(A1:A10,LAMBDA(a,LET(b,TEXTBEFORE(a&"|","_"&A12:A14&"|",-1),IFERROR(CONCAT(IF(b&"_"&A12:A14=a,b&"_"&B12:B14,"")),a))))
The concatenation with a "|" would assert we only replace values when at the exact end of the input. Just in case there would be a stray (for example) 'Rick' somewhere before the end.

