I'm trying to achieve the following in Google Sheets.
Context - these are exported bank statements.
I have a sheet of lookup values (string, category).
| String | Category |
|---|---|
| ABC | Cat1 |
| DEF | Cat2 |
| GHI | Cat3 |
I have another sheet of data, in particular 1 column which is Description.
| Description | Amount |
|---|---|
| THE ABC SHOP TXN:1234567 | 100 |
| THE ABC SHOP TXN:3456789 | 200 |
| DEFINITELY ANOTHER SHOP REF: 1293891 | 500 |
The strings in the first sheet are to look up against as the Descriptions that contain both static and dynamic identifiers in the same column. In particular I need to assign that row a category based on the description against the sheet of regexes I have constructed so that I can do a pivot table against the data for reporting.
| Description | Amount | Category |
|---|---|---|
| THE ABC SHOP TEXAS TXN:1234567 | 100 | Cat1 |
| THE ABC SHOP DALLAS TXN:3456789 | 200 | Cat1 |
| DEFINITELY ANOTHER SHOP HOUSTON REF: 1293891 | 500 | Cat2 |
Ideally this would also be a ARRAYFORMULA.
I can't use a VLOOKUP because that's only works for a exact match.
I've also tried INDEX/MATCH but that causes issues if I try to put a REGEXMATCH inside the expression as I can't put in a range in the REGEXMATCH.
In a way I guess this is a reversed VLOOKUP but instead of finding a match on a target range, I want to find the row of first value that is contained within the source value.
1 Answer
You may try:
=map(A2:A,lambda(Σ,if(Σ="",,iferror(+tocol(index(if(search(E2:E,Σ),F2:F,)),3),"--")))) 3