For example there is data on one sheet :
And I would like to lookup data based on id and return all the concerning rows into one cell like this:
Is that possible with an excel formula or is this only solvable with VBA?
Thank you for your help in advance.
I found a vba that came close to a solution but didn’t work. I’ve looked at “index, match” functions “small” functions but could find a solution that puts data into a single cell…
This is the vba code I found that came close to solution:
'Function SingleCellExtract(Lookupvalue As String, LookupRange As Range, ColumnNumber As Integer) Dim i As Long Dim Result As String For i = 1 To LookupRange.Columns(1).Cells.Count If LookupRange.Cells(i, 1) = Lookupvalue Then Result = Result & " " & LookupRange.Cells(i, ColumnNumber) & "," End If Next i SingleCellExtract = Left(Result, Len(Result) – 1) End Function'
the vba threw value or compile errors.. it looks like it only returns values from one vertical column
“Is that possible with an excel formula or is this only solvable with VBA?”
It sure is possible through formula, but you’ll have to have access to the
=TEXTJOIN(CHAR(10),TRUE,IF($A$2:$A$11=G2,$B$2:$B$11&", "&$C$2:$C$11&", "&$D$2:$D$11&", "&$E$2:$E$11,""))
Note: It’s an array formula and need to be confirmed through CtrlShiftEnter
Drag the formula down and make sure you got textwrap selected on column H.
No access to
TEXTJOIN? You can always create your own, for example:
Function TEXTJOIN(rng As Range, id As Long) As String For Each cl In rng If cl.Value = id Then If TEXTJOIN = "" Then TEXTJOIN = cl.Offset(0, 1) & ", " & cl.Offset(0, 2) & ", " & cl.Offset(0, 3) & ", " & cl.Offset(0, 4) Else TEXTJOIN = TEXTJOIN & Chr(10) & cl.Offset(0, 1) & ", " & cl.Offset(0, 2) & ", " & cl.Offset(0, 3) & ", " & cl.Offset(0, 4) End If End If Next cl End Function
H2 you can call the UDF through
=TEXTJOINS($A$2:$A$11,G2) and drag down. Again, make sure textwrapping is checked for the column.
As per OP’s comment, this is how I got the data to show correctly:
- Select column
Hand click textwrap + top alignment as shown in this screenshot:
- Next, select all cells if result is not correct yet:
- Double-click the line between columns and rows to space them to fit the data