excel字母数字序列

时间:2018-10-16 11:42:38

标签: excel excel-formula office365

我需要生成一个4位字母数字代码。它应按以下顺序运行:

0000> 0001> 0002> 0003> 0004> 0005> 0006> 0007> 0008> 0009> 000A> 000B ... ZZZO> ZZZP> ZZZQ> ZZZR> ZZZS> ZZZT> ZZZU> ZZZV> ZZZW> ZZZX> ZZZY> ZZZZ

我尝试将代码分解为四个数字,然后使用级联再次将它们组合在一起。

有一些可以帮助我的附加组件,但是我宁愿在选择附加组件之前先找到一个公式。

3 个答案:

答案 0 :(得分:5)

正如罗恩(Ron)所述,该序列中有36 ^ 4 = 1,679,616个值,该值太大,无法放入excel中的任何一行或一列。因此,我建议将序列放入1,296 x 1,296的网格中。

在创建网格之前,在单元格A1:A36中输入唯一值(0-9,A-Z)。然后在单元格C4中创建一个2个字符的序列,并将其向下复制并复制到单元格D1299中:

=INDEX($A$1:$A$36,QUOTIENT(ROW()-4,36)+1,1)

您可以从此处复制,粘贴和转置E2:AWZ3单元格中的值。最后一步是通过单元格E4中的此公式来连接值:

=CONCATENATE($C4,$D4,E$2,E$3)

将此公式复制到E4:AWZ1299范围以得到最终结果。它应该看起来像这样:

enter image description here

答案 1 :(得分:2)

复制将结果放入一个正方形矩阵的“明智”想法,并将Dominique的伪代码用于VBA例程,我们得出:

Option Explicit
Sub Dural()
    Dim a(35) As String
    Dim I As Long, j As Long, k As Long, l As Long, m As Long
    Dim col As Collection
    Dim vRes, V

'populate array with the individual items
For I = 0 To 9
    a(I) = CStr(I)
Next I
For I = 10 To 35
    a(I) = Chr(I + 55)
Next I

Set col = New Collection
I = 0
For j = 0 To 35
    For k = 0 To 35
        For l = 0 To 35
            For m = 0 To 35
                I = I + 1
                col.Add CStr(a(j) & a(k) & a(l) & a(m))
            Next m
        Next l
    Next k
Next j

ReDim vRes(1 To 1296, 1 To 1296)
I = 0
j = 1
For Each V In col
    I = I + 1
    If I > UBound(vRes, 1) Then
        j = j + 1
        I = 1
    End If
    vRes(I, j) = V
Next V

Dim R As Range
Set R = Range(Cells(1, 3), Cells(UBound(vRes, 1), 2 + UBound(vRes, 2)))
Application.ScreenUpdating = False
With R
    .EntireColumn.Clear
    .EntireColumn.NumberFormat = "@"
    .Value = vRes
    .EntireColumn.AutoFit
End With

Application.ScreenUpdating = True

End Sub

尽管看起来有些复杂,但

  • 在集合中收集结果
  • 使用结果填充VBA数组,然后
  • 将vba数组写入工作表范围

代码的运行速度比我们对工作表进行串行写入的速度快得多。在我的机器上,例行程序只花了四秒钟以上

答案 2 :(得分:1)

在VBA(伪代码)中:进行某种形式的列表/集合,如下所示:

Declare @test VARCHAR(50) = '85583,85584,85586,85587'
select * from string_split(@test,',')