I learned from gekkasuikou san
Option Explicit
Dim p() As Long
Dim s As Variant
Dim m As Long
Dim k As Long
Dim w()
Sub test_by_gekkasuikou_san()
Dim i As Long
k = 0
s = Array("A", "B", "C")
m = UBound(s) + 1
ReDim p(1 To m)
ReDim w(1 To m * (m - 1), 1 To m)
For i = 1 To m
p(i) = i - 1
Next
Perm 1
Worksheets.Add
Range("A1").Resize(k, m).Value = w
End Sub
Private Sub Perm(n As Long)
Dim i As Long
If n < m Then
For i = n To m
Swap p(n), p(i)
Perm n + 1
Swap p(n), p(i)
Next
Else
k = k + 1
For i = 1 To m
w(k, i) = s(p(i))
Next
End If
End Sub
Private Sub Swap(ByRef A As Long, ByRef B As Long)
Dim T As Long
T = A
A = B
B = T
End Sub