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

时间:2018-12-18 11:01:26

标签: excel vba

我链接Get a first column range from a range in Excel VBA来掩盖内容。

我的问题是:

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

致谢

2 个答案:

答案 0 :(得分:1)

Range("mycolumn").cells(1,1).column将为您提供名为“ mycolumn”的范围内第一列的编号。

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

答案 1 :(得分:0)

  

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

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

在工作表上,

=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。

enter image description here