如何使用 Excel 宏从 Excel 中的列名中获取列号?
7 回答
我想你想要这个?
列名到列号
Sub Sample()
ColName = "C"
Debug.Print Range(ColName & 1).Column
End Sub
编辑:还包括你想要的相反
列号到列名
Sub Sample()
ColNo = 3
Debug.Print Split(Cells(, ColNo).Address, "$")(1)
End Sub
跟进
就像如果我在最顶部有薪水字段现在可以在单元格 C(1,1) 中说如果我更改文件并将薪水列转移到其他地方说 F(1,1) 那么我将不得不修改代码所以我希望代码检查 Salary 并找到列号,然后根据该列号执行其余操作。
在这种情况下,我建议使用.FIND
下面的示例
Option Explicit
Sub Sample()
Dim strSearch As String
Dim aCell As Range
strSearch = "Salary"
Set aCell = Sheet1.Rows(1).Find(What:=strSearch, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
MsgBox "Value Found in Cell " & aCell.Address & _
" and the Cell Column Number is " & aCell.Column
End If
End Sub
快照
当您在寻找 VBA 解决方案时,这是我在寻找公式解决方案时在谷歌上的最佳结果,所以我会为任何像我一样来到这里的人添加这个:
Excel 公式从列字母返回数字(来自@A. Klomp 上面的评论),其中单元格 A1 包含您的列字母:
=列(间接(A1&“1”))
由于间接函数是易失的,它会在任何单元格更改时重新计算,因此如果您有很多这样的函数,它可能会减慢您的工作簿。考虑另一种解决方案,例如“code”函数,它为您提供 ASCII 字符的编号,从 65 处的“A”开始。请注意,要执行此操作,您需要检查列名中有多少位数字,并且根据“A”、“BB”或“CCC”改变结果。
Excel 公式从数字返回列字母(来自上一个问题How to convert a column number (eg. 127) into an excel column (eg. AA),由@Ian 回答),其中 A1 保存您的列号:
=替代(地址(1,A1,4),“1”,“”)
请注意,无论列名中有多少个字母,这两种方法都有效。
希望这对其他人有帮助。
您可以跳过所有这些,只需将您的数据放在一个表中。然后参考表格和标题,它将是完全动态的。我知道这是 3 年前的,但有人可能仍然觉得这很有用。
示例代码:
Activesheet.Range("TableName[ColumnName]").Copy
您还可以使用:
activesheet.listobjects("TableName[ColumnName]").Copy
您甚至可以在工作表公式中使用此参考系统。它非常有活力。
希望这可以帮助!
在即时窗口中编写并运行以下代码
?cells(,"type the column name here").column
例如?cells(,"BYL").column
将返回 2014。代码不区分大小写,因此您可以编写?cells(,"byl").column
并且输出仍然相同。
基于阿纳斯塔西娅的回答。我认为这是最短的 vba 命令:
Option Explicit
Sub Sample()
Dim sColumnLetter as String
Dim iColumnNumber as Integer
sColumnLetter = "C"
iColumnNumber = Columns(sColumnLetter).Column
MsgBox "The column number is " & iColumnNumber
End Sub
警告:此代码起作用的唯一条件是工作表处于活动状态,因为Columns
等效于ActiveSheet.Columns
. ;)
这是一个纯 VBA 解决方案,因为 Excel 可以保存连接的单元格:
Public Function GetIndexForColumn(Column As String) As Long
Dim astrColumn() As String
Dim Result As Long
Dim i As Integer
Dim n As Integer
Column = UCase(Column)
ReDim astrColumn(Len(Column) - 1)
For i = 0 To (Len(Column) - 1)
astrColumn(i) = Mid(Column, (i + 1), 1)
Next
n = 1
For i = UBound(astrColumn) To 0 Step -1
Result = (Result + ((Asc(astrColumn(i)) - 64) * n))
n = (n * 26)
Next
GetIndexForColumn = Result
End Function
基本上,此函数与任何 Hex 到 Dec 函数的功能相同,只是它只需要字母字符(A = 1,B = 2,...)。最右边的 char 计为单个,左边的每个 char 是右边 char 的 26 倍(这使得 AA = 27 [1 + 26],AAA = 703 [1 + 26 + 676])。UCase() 的使用使该函数不区分大小写。
在我看来,获取列号的最简单方法是:
Sub Sample()
ColName = ActiveCell.Column
MsgBox ColName
End Sub