我需要在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))
如何更新?
使用下面的公式,但... INT
和 MOD
函数,我们可以按照所需的方式更新字母代码。 检查不同位置的不同公式的模式(并回忆一下 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个, 你会产生更多的变化,而不是单列, 所以你必须开发一个多列的公式变化。
考虑下面的用户定义函数。
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
它将把一串任意的大写字母 "凸起 "一个。