Sub bbb()
Dim arr, arr1, arr2, s$, s1$, i&, j&, k&, r&, r1&
arr = [b5].CurrentRegion
s = [f3]: r = 1
ReDim arr2(1 To 1)
'*********************-- key point--******************* for example: [f3] = "128", then s = "128" too
For i = Len(s) To 1 Step -1 '* cycle1: i=3 , Mid(s, i, 1)="8" , s1="TUV"
s1 = arr(Mid(s, i, 1), 2) '* arr1=array("T","U","V")
ReDim arr1(1 To r * Len(s1)) '* cycle2: i=2 , Mid(s, i, 1)="2" , s1="ABC"
For j = 1 To Len(s1) '* arr1=array("AT","AU","AV","BT","BU","BV","CT","CU","CV")
For k = 1 To UBound(arr2) '* cycle3: i=1 , Mid(s, i, 1)="1" then s1=".@"
r1 = r1 + 1 '* arr1=array(".AT",".AU",".AV",".BT",".BU",".BV",".CT",".CU",".CV","@AT","@AU","@AV","@BT","@BU","@BV","@CT","@CU","@CV")
arr1(r1) = Mid(s1, j, 1) & arr2(k) '*
Next k '* the main idea: each time the last combination result is recombined with the new string.
Next j '*
arr2 = arr1 '*
r = UBound(arr1) '*
r1 = 0 '*
Next i '*
'*********************-- key point--*******************
ReDim arr2(1 To UBound(arr1), 1 To 2)
For i = 1 To UBound(arr1)
arr2(i, 1) = arr1(i)
arr2(i, 2) = -i
Next i
[h5].CurrentRegion.Offset(1).ClearContents
[h6].Resize(i - 1, 2) = arr2
End Sub