That's going to depend on the shape of the array.
If it's a one dimension array
a = Filter(Selection, Cells(i, 1).Value, , vbTextCompare)
rows = UBound(a)
Cells(i, 1).Resize(1, rows ) = Application.WorksheetFunction.Transpose(a)
Notice that WorksheetFunction.Transpose(a) swaps the rows and columns of the array.
Multi-dimensional arrays will depend on how they where created.
We can think of it like this
Database Query Arrays: a = recordset.getRows()
And
Dim a(10, 100) Redim Preserve a(10, Ubound(a) + 1)
Are aligned like this a(columns, rows) because you can only re-size the last dimentsion of an array.
So we would:
a = Filter(Selection, Cells(i, 1).Value, , vbTextCompare)
rows = UBound(a, 2)
columns = UBound(a, 1)
Cells(i, 1).Resize(columns, rows ) = Application.WorksheetFunction.Transpose(a)
Excel Range Arrays are base 1 and have the same shape as the Range itself.
a = Range("A1:K200").Value
a(1,1) = cells(1, 1) evaluates to True
So you can do this
a = Range("A1:K200").Value
Range("A1:K200") = a
Or
a = Filter(Selection, Cells(i, 1).Value, , vbTextCompare)
rows = UBound(a, 1)
columns = UBound(a, 2)
Cells(i, 1).Resize(rows, columns) = a