Private Sub Form_Load()
Dim X As String
X = getall("12345678,ABCDEFG,abcdef,~!@#$", 4, 3)
MsgBox X, 0, UBound(Split(X, ",")) + 1
End Sub
Function getall(ByVal X As String, ByVal n As Integer, ByVal m As Integer) As String
Dim temp As Variant, temp2() As String
Dim I As Long, J As Long
temp = Split(X, ",")
If n = 2 And m = 1 Then
ReDim Preserve temp2(Len(temp(0) & temp(1)) - 1)
For I = 0 To UBound(temp2)
temp2(I) = Mid(temp(0) & temp(1), I + 1, 1)
Next
getall = Join(temp2, ",")
Erase temp2
End If
If n = 2 And m = 2 Then
ReDim Preserve temp2(1 To Len(temp(0)) * Len(temp(1)))
For I = 1 To Len(temp(0))
For J = 1 To Len(temp(1))
temp2((I - 1) * Len(temp(1)) + J) = Mid(temp(0), I, 1) & Mid(temp(1), J, 1)
Next
Next
getall = Join(temp2, ",")
Erase temp2
End If
If n > 2 And m = 1 Then
getall = Left(temp(n - 1), 1)
For I = 2 To Len(temp(n - 1))
getall = getall & "," & Mid(temp(n - 1), I, 1)
Next
getall = getall(X, n - 1, 1) & "," & getall
End If
If n > m And m >= 2 Then
ReDim temp2(Len(temp(n - 1)) - 1)
For J = 1 To Len(temp(n - 1))
temp2(J - 1) = Replace(getall(X, n - 1, m - 1), ",", Mid(temp(n - 1), J, 1) & ",") & Mid(temp(n - 1), J, 1)
Next
getall = Join(temp2, ",")
Erase temp2
getall = IIf(getall(X, n - 1, m) = "", getall, getall(X, n - 1, m) & "," & getall)
End If