bre*_*tdj 199
此函数返回给定列号的列字母.
Function Col_Letter(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
Run Code Online (Sandbox Code Playgroud)
测试第100列的代码
Sub Test()
MsgBox Col_Letter(100)
End Sub
Run Code Online (Sandbox Code Playgroud)
rob*_*tsd 84
如果您不想使用范围对象:
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
Run Code Online (Sandbox Code Playgroud)
小智 44
对我有用的东西是:
Cells(Row,Column).Address
Run Code Online (Sandbox Code Playgroud)
这将为您返回$ AE $ 1格式参考.
Nik*_*nov 18
并使用递归的解决方案:
Function ColumnNumberToLetter(iCol As Long) As String
Dim lAlpha As Long
Dim lRemainder As Long
If iCol <= 26 Then
ColumnNumberToLetter = Chr(iCol + 64)
Else
lRemainder = iCol Mod 26
lAlpha = Int(iCol / 26)
If lRemainder = 0 Then
lRemainder = 26
lAlpha = lAlpha - 1
End If
ColumnNumberToLetter = ColumnNumberToLetter(lAlpha) & Chr(lRemainder + 64)
End If
End Function
Run Code Online (Sandbox Code Playgroud)
OSU*_*rba 18
还有一种方法可以做到这一点.Brettdj的回答让我想到了这一点,但如果你使用这种方法你不必使用变量数组,你可以直接转到字符串.
ColLtr = Cells(1, ColNum).Address(True, False)
ColLtr = Replace(ColLtr, "$1", "")
Run Code Online (Sandbox Code Playgroud)
或者可以使它更紧凑
ColLtr = Replace(Cells(1, ColNum).Address(True, False), "$1", "")
Run Code Online (Sandbox Code Playgroud)
请注意,这取决于您引用单元格对象中的第1行.
这可以通过使用公式获得:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
Run Code Online (Sandbox Code Playgroud)
所以也可以按要求写成VBA函数:
Function ColName(colNum As Integer) As String
ColName = Split(Worksheets(1).Cells(1, colNum).Address, "$")(1)
End Function
Run Code Online (Sandbox Code Playgroud)
这是robartsd的答案版本(具有Jan Wijninckx的单线解决方案的风格),使用递归而不是循环.
Public Function ColumnLetter(Column As Integer) As String
If Column < 1 Then Exit Function
ColumnLetter = ColumnLetter(Int((Column - 1) / 26)) & Chr(((Column - 1) Mod 26) + Asc("A"))
End Function
Run Code Online (Sandbox Code Playgroud)
我用以下输入测试了这个:
1 => "A"
26 => "Z"
27 => "AA"
51 => "AY"
702 => "ZZ"
703 => "AAA"
-1 => ""
-234=> ""
Run Code Online (Sandbox Code Playgroud)
robertsd的代码很优雅,但要使其面向未来,将n的声明更改为long类型
如果您希望公式避免使用宏,则可以使用包含在内的第702列
=IF(A1>26,CHAR(INT((A1-1)/26)+64),"")&CHAR(MOD(A1-1,26)+65)
Run Code Online (Sandbox Code Playgroud)
其中A1是包含要转换为字母的列号的单元格.
小智 7
最新消息:请忽略下面的功能,@ SurasinTancharoen设法提醒我它已经坏了n = 53.
对于那些感兴趣的人,下面是其他破碎的值n = 200:
请使用@brettdj函数满足您的所有需求.它甚至适用于Microsoft Excel最新的最大列数限制:16384应该给出XFD
更新结束
以下功能由Microsoft提供:
Function ConvertToLetter(iCol As Integer) As String
Dim iAlpha As Integer
Dim iRemainder As Integer
iAlpha = Int(iCol / 27)
iRemainder = iCol - (iAlpha * 26)
If iAlpha > 0 Then
ConvertToLetter = Chr(iAlpha + 64)
End If
If iRemainder > 0 Then
ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
End If
End Function
Run Code Online (Sandbox Code Playgroud)
适用于
这是一个基于@DamienFennelly上面的回答的函数。如果你给我一个赞,也给他一个赞!:P
Function outColLetterFromNumber(iCol as Integer) as String
sAddr = Cells(1, iCol).Address
aSplit = Split(sAddr, "$")
outColLetterFromNumber = aSplit(1)
End Function
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
385469 次 |
| 最近记录: |