Vba 列名称中的Excel列编号

Vba 列名称中的Excel列编号,vba,excel,Vba,Excel,如何使用Excel宏从Excel中的列名中获取列号 我想你想要这个 列名称到列编号 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 跟进 比如,如果我在最

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

我想你想要这个

列名称到列编号

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
跟进

比如,如果我在最顶端有salary字段,比如说在单元格C(1,1),现在如果我更改文件并将salary列移到其他位置,比如F(1,1),那么我必须修改代码,以便我希望代码检查salary并找到列号,然后根据该列号执行其余操作

在这种情况下,我建议使用

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”))

由于间接函数是不稳定的,因此每当任何单元格发生更改时,它都会重新计算,因此如果您有很多这样的函数,它可能会减慢工作簿的速度。考虑另一个解决方案,例如“代码”函数,它给你一个ASCII字符的编号,以65的“a”开头。请注意,要执行此操作,您需要检查列名中有多少位数字,并根据“A”、“BB”或“CCC”更改结果

Excel公式返回数字中的列字母(来自上一个问题,由@Ian回答),其中A1表示列号:

=替换(地址(1,A1,4),“1”和“)

请注意,无论列名中有多少个字母,这两种方法都有效


希望这对其他人有所帮助。

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

示例代码:

Activesheet.Range("TableName[ColumnName]").Copy
您还可以使用:

activesheet.listobjects("TableName[ColumnName]").Copy
您甚至可以在工作表公式中使用此参考系。它非常有活力


希望这有帮助

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

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

例如,
?单元格(,“BYL”)。列
将返回2014。代码不区分大小写,因此您可以编写
?单元格(,“byl”)。列
,输出仍然相同。

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

根据Anastasiya的回答,结束Sub

。我认为这是最短的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
基本上,这个函数与任何十六进制到十进制的函数一样,只是它只接受字母字符(A=1,B=2,…)。 最右边的字符计数为单个,左边的每个字符计数为右边字符的26倍(这使得AA=27[1+26],AAA=703[1+26+676])。
使用UCase()使该函数不区分大小写。

看看这个问题:有一个VBA解决方案,列名称是字母还是标题?@wolf:这与OP的要求相反:)我知道你要的是一个宏,你有一个很好的答案,但作为旁注,在Excel中你可以使用
=COLUMN(间接(“C”&1))
。可能有一个更简单的方法..比如如果我在最顶端有salary字段,比如说在单元格C(1,1),现在如果我修改文件并将salary列移到其他位置,比如F(1,1)然后我将不得不修改代码,以便我希望代码检查薪资并找到列号,然后根据该列号执行其余操作。如果此答案满足您的问题,请确保选择最佳答案!如果我有无效的clumn名称,比如“SUJA”,我只想知道该列不存在。我们如何实现这一点?谢谢你advance@KaviSuja当前位置我不确定我是否理解你的意思question@SiddharthRout我在下面的链接中找到了解决方案和我的实际问题:@ExcelHero您错过了上面的要点-在我的解决方案中,单元格A1包含列字母/数字。您的解决方案将解决方案硬编码为将“A”转换为1,或将1转换为“A”。我的版本只是演示了如何动态地执行此操作(尽管如果您想硬编码,是的,这也是可能的)。请进去亲自试一试,因为我已经证实它们是有效的。