从Excel VBA中的范围获取列范围数

从Excel VBA中的范围获取列范围数,excel,vba,Excel,Vba,我链接到不理解的内容 我的问题是: 如果我知道该列的名称,是否可以知道该列的编号?例如:我想知道名为mycolumn的列是否是数字1或2或3或x。。。在名为mytable的表中 关于范围mycolumn.cells1,1.column将为您提供称为mycolumn的范围中第一列的编号 编辑:我的错-我没有看到这是表中的命名列-Axel在注释中的回答是正确的 。。。如果名为mycolumn的列是数字1或2或3或x。。。在名为mytable的表中 要查找列在其父表中的顺序位置,只需查看表的范围,而不

我链接到不理解的内容

我的问题是:

如果我知道该列的名称,是否可以知道该列的编号?例如:我想知道名为mycolumn的列是否是数字1或2或3或x。。。在名为mytable的表中

关于

范围mycolumn.cells1,1.column将为您提供称为mycolumn的范围中第一列的编号

编辑:我的错-我没有看到这是表中的命名列-Axel在注释中的回答是正确的

。。。如果名为mycolumn的列是数字1或2或3或x。。。在名为mytable的表中

要查找列在其父表中的顺序位置,只需查看表的范围,而不需要查看表所在的工作表

在工作表上

=MATCH("mycolumn", mytable[#Headers], 0)
在下图中,上面的公式返回3

在VBA中,作为函数

Option Explicit

Sub main()

    Debug.Print ColumnNdx("sheet2", "mytable", "mycolumn")

End Sub

Function ColumnNdx(wsnm as string, tblnm As String, colnm As String)

    Dim m As Variant, hdrrng As Range

    ColumnNdx = CVErr(xlErrNA)

    Set hdrrng = ThisWorkbook.Worksheets(wsnm ).ListObjects(tblnm).HeaderRowRange

    m = Application.Match(colnm, hdrrng, 0)

    If Not IsError(m) Then ColumnNdx = CLng(m)

End Function
上面的函数返回3


对于表格,您可以在工作表或表格中找到匹配项。链接问题与命名表格中的命名列无关。如果在您的案例中它确实是命名表中的命名列,那么可能会有帮助:c=.Rangemytable[mycolumn].column。对于我的案例,正确的答案来自user10798192。唯一的问题是我不知道如何在代码中插入它。