2012-12-06 21 views

回答

2

我設法得到2種方法。一個依賴於Excel的Cells,所以它失敗,如果你使用了無效的列:

Function NumToLetter(q As Long) As String 

Dim Add As String 
'Ignore error so it fails on an invalid cell 
On Error Resume Next 
Add = Cells(1, q).Address 
If Len(Add) Then 
    NumToLetter = Mid(Add, 2, InStr(2, Add, "$") - 2) 
Else 
    NumToLetter = "Invalid Cell" 
End If 

End Function 

其他用途基地26,並只限於BU最大值爲long

Function Num2Letter(q As Long) As String 

Dim r As Long 
While q > 0 
    r = q Mod 26 
    If r = 0 Then r = 26 ' needed for column Z 
    Num2Letter = Chr(64 + r) & Num2Letter 
    q = Int(q/26) + (r = 26) ' fix for column Z 
Wend 

End Function 

測試用一個MessageBox這些值:

msgbox "Column 2445 is " & NumToLetter(2445) & " or " Num2Letter(2445) 

列2445是CPA或CPA

msgbox "Column 42445 is " & NumToLetter(42445) & " or " Num2Letter(42445) 

列42445是無效的單元格或BJTM

msgbox "Column -1 is " & NumToLetter(-1) & " or " Num2Letter(-1) 

柱-1是無效的單元格或

+0

感謝您的功能。他們做了我需要他們做的事。 – Atwp67

0

這適用於列A到ZZ(如在由肖恩柴郡的評論所指出):

Function ColLetter(ColNumber As Integer) As String 
    ColLetter = Left(Cells(1, ColNumber).Address(False, False), 1 - (ColNumber > 26)) 
End Function 

要使用:MsgBox ColLetter(oRangeObject.Column)

+0

這個工作,直到列703,與'AAA',但是這截斷它到'AA' – SeanC

+0

啊,對。我從來沒有需要它 - +1給你更完整的答案。 –