Sub TroisEnUn()
Dim t(1 To 3), r, x, y, z, n&
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
For n = 1 To 3: t(n) = Range(Cells(2, n), Cells(Rows.Count, n).End(xlUp)): Next
For n = 1 To 3
If Not IsArray(t(n)) Then
ReDim r(1 To 1, 1 To 1): r(1, 1) = t(n): t(n) = r
End If
Next n
ReDim r(1 To 1 + UBound(t(1)) * UBound(t(2)) * UBound(t(3)), 1 To 3): n = 1
For Each x In t(1): For Each y In t(2): For Each z In t(3)
n = n + 1: r(n, 1) = x: r(n, 2) = y: r(n, 3) = z: Next z, y, x
r(1, 1) = [a1]: r(1, 2) = [b1]:: r(1, 3) = [c1]
Range("e:g").ClearContents: Range("e1").Resize(UBound(r), 3) = r
End Sub