[FUNC]Excel的列名称数字转换成字符convert column number to letter

excel 列名称由数字转成字母格式,如何编程实现?

 

For example:

1 -> A
2 -> B
3 -> C

26->Z

27->AA

28->AB

52-> AZ
53 -> BA
 

 

 

【数字转成字母】

方法①

思路:先用数组对象,下标1-26对应存储字符A-Z,.然后把excel列数字 看成二十六进制的数

二十六进制,11表示27,12表示28.然后从数组对象里查询到:1对应的是A,.2对应的是B.这样11改成AA,12改成AB。

 

测试反例:

52 的26进制应该是 20
而excel中52列是AZ,与二十六进制结果不对应。尽管A*26^1+Z*26^0  与2*26^1+0*26^0是相等的。

 

;正确方法如下

getColName(i)
{
    arr:=[]
    j:=1
    while(i>0)
    {
        arr[j]:=Mod(i-1,26)
        i:=(i-arr[j])//26
        j:=j+1
    }
    alpha:="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    cha_arr:=StrSplit(alpha,"")
    for k,v in arr
        s:=cha_arr[v+1] . s  ;数组从1开始
    Return s
}

 

;再简化下

ColumnLetter(ColumnNumber)
{
    n := ColumnNumber
    While (n > 0)
	{
        c:=Mod((n-1),26)
        s:= Chr(c + 65)  .  s
        n:= (n-c) // 26
    }
    return s
}

 

 

ColumnNumberToLetter(iCol)
{
    If (iCol <= 26)
    {
        ColumnNumberToLetter := Chr(iCol + 64)
    }Else{
        lRemainder :=Mod( iCol,26)
        lAlpha := floor(iCol / 26)

        If (lRemainder = 0 )
        {
            lRemainder := 26
            lAlpha := lAlpha - 1
        }
        ColumnNumberToLetter := ColumnNumberToLetter(lAlpha) . Chr(lRemainder + 64)
    }
    return ColumnNumberToLetter
}



vba版本:

Function ColumnLetter(ColumnNumber As Long) As String
    Dim n As Long
    Dim c As Byte
    Dim s As String

    n = ColumnNumber
    Do
        c = ((n - 1) Mod 26)
        s = Chr(c + 65) & s
        n = (n - c) \ 26
    Loop While n > 0
    ColumnLetter = s
End Function

 

 

方法②

用excel内置函数也可以实现

Col_Letter(lngCol)
{
	oExcel :=   ComObjActive("Excel.Application")
	vArr:=[]
	vArr:= StrSplit(oExcel.Cells(1, lngCol).Address(True, False), "$")
	objRelease(oExcel)
	return % vArr[1]
}

 

vba版本:

Function Col_Letter(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function

 


测试用例:

MsgBox % Col_Letter(52) 	;AZ
MsgBox % Col_Letter(53) 	;BA
MsgBox % Col_Letter(702)    ;ZZ
MsgBox % Col_Letter(703)    ;AAA

 

 

 

【字母转成数】给定一个Excel表的列名,返回相应列的数字很容易:

getColNum(InputVar)
{
    StringUpper, OutputVar, InputVar
    arr:=StrSplit(OutputVar,"")
    result:=0
    for k,v in arr
    {
        result := result * 26 + asc(v)-64
    }
    return result
}



参考:

http://blog.csdn.net/ajiangfan/article/details/52637389

https://stackoverflow.com/questions/12796973/function-to-convert-column-number-to-letter

你可能感兴趣的:(AutoHotkey,Excel,函数库)