如何在Excel中自动增加一个字母得到下一个字母?

问题描述 投票:0回答:1

我需要在Excel中做一个自动公式,在一列的每个单元格中按字母顺序增加字符。

ABCDEFAA

...

ABCDEFAZ
ABCDEFBA
...
ABCDEFBZ
ABCDEFCA

我有如下公式,但不能增加更多的字符:=IF(RIGHT($A1,1)="Z",CHAR(CODE(LEFT(A1,1))+1),LEFT(A1,1))&CHAR(65+MODE(CODE(RIGHT(A1,1))+1-65,26))

如何更新?

excel-vba
1个回答
1
投票

使用下面的公式,但... INTMOD 函数,我们可以按照所需的方式更新字母代码。 检查不同位置的不同公式的模式(并回忆一下 CODE 返回字符代码 第一 任何字符串中的字符)。)

从最后一个字母开始。

CHAR(MOD(CODE(RIGHT(A$1,1))-65+ROW()-1,26)+65)

从最后一个字母开始:

CHAR(MOD(CODE(RIGHT(A$1,2))-65+INT((ROW()-1)/26),26)+65)

从最后一个字母开始的第三个字母

CHAR(MOD(CODE(RIGHT(A$1,3))-65+INT((ROW()-1)/26^2),26)+65)

等。

所以,如果你需要更新最后三个字母,你可以把一个公式放在一起,比如。

= LEFT($A$1,5)&
CHAR(MOD(CODE(RIGHT(A$1,3))-65+INT((ROW()-1)/26^2),26)+65)&
CHAR(MOD(CODE(RIGHT(A$1,2))-65+INT((ROW()-1)/26),26)+65)&
CHAR(MOD(CODE(RIGHT(A$1,1))-65+ROW()-1,26)+65)

备注 如果你有Excel O365与 TEXTJOIN 函数,你可以使用更简单的公式。

=LEFT($A$1,5) &TEXTJOIN(,,CHAR(MOD(CODE(RIGHT($A$1,{3,2,1}))-65+INT((ROW()-1)/26^{2,1,0}),26)+65))

你可以用这个变化来包含你的初始字符串中的所有字母。

=TEXTJOIN(,,CHAR(MOD(CODE(RIGHT($A$1,(9-ROW(INDEX($A:$A,LEN($A$1)):INDEX($A:$A,1)))))-65+INT((ROW()-1)/26^(8-ROW(INDEX($A:$A,LEN($A$1)):INDEX($A:$A,1)))),26)+65))

如果你有 SEQUENCE 函数,你可以把它缩短一点。

    =TEXTJOIN(,,CHAR(MOD(CODE(RIGHT($A$1,SEQUENCE(LEN($A$1),,LEN($A$1),-1)))-65+INT((ROW()-1)/26^SEQUENCE(LEN($A$1),,LEN($A$1)-1,-1)),26)+65))

当然,如果你涉及的字母超过6个, 你会产生更多的变化,而不是单列, 所以你必须开发一个多列的公式变化。


enter image description here


0
投票

考虑下面的用户定义函数。

Public Function NextLetr(s As String) As String
    Dim i As Long, L As Long, arrL, arrN

    L = Len(s)

    If L = 1 Then
        NextLetr = Chr(Asc(s) + 1)
        If NextLetr = "[" Then
            NextLetr = "AA"
        End If
        Exit Function
    End If

    ReDim arrL(1 To L) As String
    ReDim arrN(1 To L) As Long

    For i = L To 1 Step -1
        arrL(i) = Mid(s, i, 1)
        arrN(i) = Asc(arrL(i))
    Next i
    For i = L To 1 Step -1
        arrN(i) = arrN(i) + 1
        If i = 1 Then Exit For
        If arrN(i) < 91 Then Exit For
        arrN(i) = 65
    Next i

    For i = 1 To L
        arrL(i) = Chr(arrN(i))
    Next i

    NextLetr = Join(arrL, "")
    If Left(NextLetr, 1) = "[" Then
        NextLetr = "AA" & Mid(NextLetr, 2)
    End If
End Function

它将把一串任意的大写字母 "凸起 "一个。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.