列名称中的Excel列号

时间:2012-04-11 13:04:15

标签: excel vba excel-vba

如何使用Excel宏从Excel中的列名获取列号?

7 个答案:

答案 0 :(得分:152)

我想你想要这个?

列名称到列号

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

关注

  
    
      

如果我有最后一个工资字段,那么现在如果我改变文件并将工资栏转移到其他地方说F(1,1)那么我将不得不修改单元格C(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

快照

enter image description here

答案 1 :(得分:5)

当您在寻找VBA解决方案时,这是我在寻找公式解决方案时在google上的最佳结果,所以我会为所有来这里的人添加此功能:

Excel公式,用于从列字母返回数字<(来自上面的@A.Klomp评论),其中单元格A1包含您的列字母:

  

=柱(间接(A1&安培;&#34; 1&#34))

由于间接功能是易失性的,因此无论何时更改任何单元格都会重新计算,因此如果您有很多单元格,则可能会降低工作簿的速度。考虑另一种解决方案,例如代码&#39; function,它为您提供ASCII字符的编号,以&#39; A&#39;开头。请注意,要执行此操作,您需要检查列名称中的位数,并根据&#39; A&#39;,&#39; BB&#39;或&#39更改结果; CCC&#39;

Excel公式,用于返回列号来自(来自前一个问题How to convert a column number (eg. 127) into an excel column (eg. AA),由@Ian回答),其中A1包含您的列号:

  

=代用品(地址(1,α-1,4),&#34; 1&#34;&#34;&#34)

请注意,无论列名中包含多少个字母,这两种方法都能正常工作。

希望这有助于其他人。

答案 2 :(得分:1)

在立即窗口中编写并运行以下代码

?cells(,"type the column name here").column

例如?cells(,"BYL").column将返回2014.代码不区分大小写,因此您可以编写?cells(,"byl").column并且输出仍然相同。

答案 3 :(得分:0)

您可以跳过所有这些,只需将数据放入表中即可。然后参考表格和标题,它将是完全动态的。我知道这是从3年前开始的,但有人可能仍然觉得这很有用。

示例代码:

Activesheet.Range("TableName[ColumnName]").Copy

您也可以使用:

activesheet.listobjects("TableName[ColumnName]").Copy

您甚至可以在工作表公式中使用此参考系统。它非常有活力。

希望这有帮助!

答案 4 :(得分:0)

基于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。 ;)

答案 5 :(得分:0)

这是纯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()的使用使该函数不区分大小写。

答案 6 :(得分:-2)

在我看来,获取列号的最简单方法是:
Sub Sample() ColName = ActiveCell.Column MsgBox ColName End Sub