将列字母转换为数字

时间:2013-11-09 15:35:33

标签: excel excel-vba vba

在Google下面的代码中找到了可以将数字转换为列字母的代码,但是从列字母到数字怎么样,任何人都可以帮助重写函数?感谢

Sub colLtr()
Dim mycolumn
mycolumn = 1000
Mcl = Left(Cells(1, mycolumn).Address(1, 0), InStr(1, Cells(1, mycolumn).Address(1, 0), "$") - 1)
MsgBox Mcl
End Sub

3 个答案:

答案 0 :(得分:6)

您可以按照这样的字母引用列:

Columns("A")

所以要获取列号,只需修改上面的代码:

Columns("A").Column

上面一行返回一个整数(在这种情况下为1)。

因此,如果您使用变量mycolumn来存储和引用列号,则可以这样设置值:

mycolumn = Sheets("Sheet1").Columns("A").Column

然后你可以用这种方式引用你的变量:

Sheets("Sheet1").Columns(mycolumn)

或引用单元格(A1):

Sheets("Sheet1").Cells(1,mycolumn)

或引用您可以使用的一系列单元格(A1:A10):

Sheets("Sheet1").Range(Cells(1,mycolumn),Cells(10,mycolumn))

答案 1 :(得分:0)

要查看字母指定列的数字等效值:

Sub dural()
    ltrs = "ABC"
    MsgBox Cells(1, ltrs).Column
End Sub

答案 2 :(得分:0)

给出的答案可能很简单,但在很大程度上次优,因为它需要获取Range并查询属性。最佳解决方案如下:

Function getColIndex(sColRef As String) As Long
  Dim sum As Long, iRefLen As Long
  sum = 0: iRefLen = Len(sColRef)
  For i = iRefLen To 1 Step -1
    sum = sum + Base26(Mid(sColRef, i)) * 26 ^ (iRefLen - i)
  Next
  getColIndex = sum
End Function

Private Function Base26(sLetter As String) As Long
  Base25 = Asc(UCase(sLetter)) - 64
End Function

一些例子:

getColIndex("A")   '-->1
getColIndex("Z")   '-->26
getColIndex("AA")  '-->27
getColIndex("AZ")  '-->52
getColIndex("AAA") '-->703