You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:27:07