I would like to get the data from several rows from one sheet sheet1 into a single cell on another sheet sheet2 based on a lookup.

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`

function:

Formula in `H2`

:

```
=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 throughCtrlShiftEnter

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
```

In cell `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.

**EDIT:**

As per OP’s comment, this is how I got the data to show correctly:

- Select column
`H`

and 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

Tags: excelexcel, vba