如何从Excel列字母获取列号(或索引)

3

我在这个网站和谷歌上搜索了一个公式。我需要根据字母计算Excel列号,例如:

A=1
B=2
..
AA=27
AZ=52
...
AAA=703

经过随机字母周期后,代码似乎会少算一位数(AZ -> BA == 少算一位数)。它也似乎会从两个不同的输入中随机产生相同的整数:

GetColumnNumber(xlLetter : Text) : Integer //Start of function

 StringLength := STRLEN(xlLetter);
 FOR i := 1 TO StringLength DO BEGIN
 Letter := xlLetter[i];
   IF i>1 THEN
     Count += ((xlLetter[i-1]-64) * (i-1) * 26) - 1;
   Count += (Letter - 64);
 END;
 EXIT(Count); //return value

我的代码示例是用于Dynamics NAV的C/AL编写的,但我也可以使用C#或vb.net编写,所以如果示例使用这些语言之一,我也不介意。


抱歉,那是我的错误,我在打字时只是在脑海中进行计算。当我对一整个字母系列运行此函数时,我得到的结果是,在 AZ 后面的下一个字母相隔一个数字,因此如果 AZ = 52,则 BA = 54。 - kevindstanley
3个回答

3

在VBA中:

Public Function GetCol(c As String) As Long
    Dim i As Long, t As Long
    c = UCase(c)
    For i = Len(c) To 1 Step -1
        t = t + ((Asc(Mid(c, i, 1)) - 64) * (26 ^ (Len(c) - i)))
    Next i
    GetCol = t
End Function

我已经为我的语言(C/AL)重新编写了它,但这个概念完美地工作。 - kevindstanley
GetColumnNumbers(c : Text) : Integer对于 i:= STRLEN(c) 到 1 做如下操作: t := t + (c[i]-64) * (POWER(26, STRLEN(c)-i)); 结束循环;返回 t; - kevindstanley

3

在VBA中:

Function ColLetter(C As Integer) As String
  If C < 27 Then
    ColLetter = Chr(64 + C)
  Else
    ColLetter = ColLetter((C - 1) \ 26) & ColLetter((C - 1) Mod 26 + 1)
  End If
End Function

0

在VBA中:(递归函数)

    Function Get_Col_Number(strColName As String, dRunningNo As Integer) As Double
        Dim dCurrentColNo As Double
        Dim dMultipleValue As Double

        strColName = Ucase(strColName)

        If (dRunningNo <= 0) Then Get_Col_Number = 0:   Exit Function

        dCurrentColNo = ((Asc(Mid(strColName, dRunningNo, 1)) - Asc("A") + 1))
        dMultipleValue = 26 ^ (Len(strColName) - dRunningNo)

        Get_Col_Number = (dCurrentColNo * dMultipleValue) + Get_Col_Number(strColName, (dRunningNo - 1))
    End Function

请按以下方式使用此函数。
Sub Main()
    Dim StrGetNoForThisColumnName As String
    StrGetNoForThisColumnName = "Xfd"

    Msgbox "Final Result : " & Get_Col_Number(StrGetNoForThisColumnName, Len(StrGetNoForThisColumnName))
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接