Untested but something like this for example:
last_row = Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row
Dim matchList()
Dim maxMatches As Long
maxMatches = Application.CountIf(Sheets("Sheet2").Range("C3:E" & last_row), "*" & Me.TBsearch_bid.Value & "*")
' Note: array is transposed as we need to resize it
ReDim matchList(1 To 17, 1 To maxMatches)
Dim counter As Long
For row_l = 3 To last_row
If UCase(Cells(row_l, 4).Value) Like "*" & UCase(Me.TBsearch_bid.Value) & "*" _
Or UCase(Cells(row_l, 3).Value) Like "*" & UCase(Me.TBsearch_bid.Value) & "*" _
Or UCase(Cells(row_l, 5).Value) Like "*" & UCase(Me.TBsearch_bid.Value) & "*" Then
counter = counter + 1
Me.ListBox1.AddItem Cells(row_l, 1)
Dim colNum As Long
For colNum = 1 To 17
matchList(colNum, counter) = Cells(row_l, colNum)
Next colNum
End If
Next row_l
ReDim Preserve matchList(1 To 17, 1 To counter)
' using Column rather than List will transpose the array back the way we want it
Me.ListBox1.Column = matchList
Bookmarks