复制上面的单元格并将值增加 1(值按字母顺序排列)

Copy the cell above and increment value by 1 (Value is alphabetical)

我是 VBA 的新手,需要一些帮助。在活动单元格中,我需要复制上面单元格中的值并将该值递增 1。该值始终是两个字母,例如 AA、AB、AC。我可以找到有关递增数字但不是字母的信息。

Sub Tester()
    Dim v As String
    v = "CD" 'for example
    Debug.Print Replace(Range(v & "1").Offset(0, 1).Address(0, 0), "1", "") '> CE
End Sub

应该适用于任何 two-letter 组合(但“ZZ”会给你“AAA”)

没有使用范围引用的限制:

Sub Tester()
    Dim e
    For Each e In Array("A", "AA", "AZ", "AZZ", "ZZZ", String(10,"Z"))
        Debug.Print e, NextSeq(CStr(e))
    Next e
End Sub

Function NextSeq(s As String)
    Dim rv As String, a As Long, carry As Boolean, ls As Long, i As Long
    ls = Len(s)
    For i = ls To 1 Step -1
        a = Asc(Mid(s, i, 1)) - 64 ' "A"=ASCII 65
        If i = ls Or carry Then
            a = IIf(a = 26, 1, a + 1) 'roll over ?
            carry = a = 1             'carry 1 to next iteration ? 
        End If
        rv = Chr(64 + a) & rv
    Next i
    NextSeq = IIf(carry, "A" & rv, rv) 'one more "A" ?
End Function

输出:

A             B
AA            AB
AZ            BA
AZZ           BAA
ZZZ           AAAA
ZZZZZZZZZZ    AAAAAAAAAAA

字节数组方法作为开始帮助

为了艺术的缘故,我演示了另一种方法来在从“AA”到“ZZ”的给定范围内“增加”two-letter组合;这可以通过增加所谓的 字节数组 .

中最后一个|前一个字母的数值来完成

将变量(例如 by())声明为 Byte 类型,可以轻松地通过 [= 将字符串值(例如 s)分配给它13=]。使用的字母(A 到 Z)现在显示元素对中相应的数字字符值(第一个字母值可以取自 by(0),第二个=最后一个取自 by(2)by(ubound(by)-1) 因为这里有 4 个索引为 0 到 3 的元素)。

Public Function IncLetter(Optional ByVal s As String = "AA") As String
    If Len(s) > 2 Or UCase(s) = "ZZ" Then
        IncLetter = s & "?": Exit Function
    End If
'a) get numeric character values
    Dim by() As Byte: by = s
'b) increment last alphabetic letter
    Dim indx As Long: indx = UBound(by) - 1
    'check if last letter is "Z"
    If UCase(Chr(by(indx))) = "Z" Then
        by(indx) = by(indx) - 25
        by(indx - 2) = by(indx - 2) + 1
    Else
        by(indx) = by(indx) + 1
    End If
'c) return new string as function result
    IncLetter = by
End Function