如何用VBA将数字123转换为12、13、21、23、31、32?
VBA生成数字的所有两位数排列组合
这里给你一段直接能用的VBA代码,运行后就能得到123的所有两位数排列:
Sub GenerateTwoDigitPermutations() Dim originalNum As String Dim digits() As String Dim i As Integer, j As Integer Dim result As String originalNum = "123" ' 可替换为其他数字串 digits = Split(StrConv(originalNum, vbUnicode), vbNullChar) ' 移除拆分后末尾的空元素 ReDim Preserve digits(UBound(digits) - 1) Debug.Print "所有两位数排列:" For i = LBound(digits) To UBound(digits) For j = LBound(digits) To UBound(digits) If i <> j Then ' 排除同一位置的数字,避免生成11这类重复项 result = digits(i) & digits(j) Debug.Print result ' 若要写入Excel单元格(从A1开始向下填充): ' Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = result End If Next j Next i End Sub
代码说明
- 先把原始数字转成字符串,再拆分为单个数字的数组,方便遍历操作。
- 用双重循环遍历所有数字位置组合,
i<>j确保不会使用同一个位置的数字生成重复两位数。 - 拼接不同位置的数字得到目标结果,可选择打印到即时窗口或写入Excel单元格。
如果原始数字是整数类型(比如123),只需将originalNum = "123"改为originalNum = CStr(123)即可。
若需要将结果收集为数组后续使用,可使用下面的函数版本:
Function GetTwoDigitPermutations(num As Integer) As Variant Dim originalNum As String Dim digits() As String Dim i As Integer, j As Integer Dim resultArr() As String Dim count As Integer originalNum = CStr(num) digits = Split(StrConv(originalNum, vbUnicode), vbNullChar) ReDim Preserve digits(UBound(digits) - 1) count = 0 ReDim resultArr(0 To (UBound(digits) + 1) * UBound(digits) - 1) ' 排列总数为n*(n-1) For i = LBound(digits) To UBound(digits) For j = LBound(digits) To UBound(digits) If i <> j Then resultArr(count) = digits(i) & digits(j) count = count + 1 End If Next j Next i ReDim Preserve resultArr(0 To count - 1) GetTwoDigitPermutations = resultArr End Function ' 调用示例 Sub TestFunction() Dim permutations As Variant permutations = GetTwoDigitPermutations(123) Debug.Print "排列结果:" For Each p In permutations Debug.Print p Next p End Sub
内容的提问来源于stack exchange,提问作者M Wine
相关产品推荐
相关产品推荐

