如何使用Excel宏从Excel中的列名获取列号?
=COLUMN(INDIRECT("C"&1))
。有可能是一个更简单的方法..
如何使用Excel宏从Excel中的列名获取列号?
=COLUMN(INDIRECT("C"&1))
。有可能是一个更简单的方法..
Answers:
我想你要这个吗?
列名到列号
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),那么我将不得不修改代码,所以我希望代码检查薪水并找到列号,然后根据该列号执行其余操作。
在这种情况下,我建议使用.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解决方案时,这是我在Google上寻找公式解决方案时的最高结果,因此,我将为所有来这里的人添加此内容,就像我所做的那样:
Excel公式返回列字母的数字(来自@A。Klomp的上述注释),其中单元格A1保存您的列字母:
=列(间接(A1&“ 1”))
由于间接函数是易失性的,因此只要更改了任何单元格,它都会重新计算,因此,如果您有很多这样的函数,可能会降低工作簿的速度。考虑另一种解决方案,例如“代码”功能,该功能为您提供ASCII字符的数字,以65处的“ A”开头。请注意,要执行此操作,您需要检查列名中的位数,以及根据“ A”,“ BB”或“ CCC”更改结果。
Excel公式,用于从数字返回列字母(来自上一个问题:如何将列编号(例如127)转换为excel列(例如AA),由@Ian回答),其中A1保存您的列号:
= substitute(address(1,A1,4),“ 1”,“”)
请注意,无论列名中包含多少个字母,这两种方法均有效。
希望这对其他人有帮助。
在立即窗口中编写并运行以下代码
?cells(,"type the column name here").column
例如,?cells(,"BYL").column
将返回2014。该代码不区分大小写,因此您可以编写?cells(,"byl").column
并且输出仍将相同。
根据Anastasiya的回答。我认为这是最短的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 to Dec函数相同,除了它只接受字母字符(A = 1,B = 2,...)。最右边的char计数为单个,左边的每个char计数为右边的char的26倍(这使AA = 27 [1 + 26],AAA = 703 [1 + 26 + 676])。UCase()的使用使此函数不区分大小写。