【问题标题】:Returning a column number from a table using the =COLUMN function使用 =COLUMN 函数从表中返回列号
【发布时间】:2019-02-01 17:14:14
【问题描述】:

我在 Excel 中有以下函数,它根据列标题返回表的列号。 该表称为 Config,表列标题为 value。下面将返回给我excel中的列号。

=COLUMN(Config[Value])-COLUMN(Config)+1

谁能告诉我如何在 VBA 中使用它? 我希望我可以使用类似 ...

Application.WorksheetFunction.Column

但我似乎无法使用Column。

有人对此有任何想法吗? 任何帮助将不胜感激。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    由于您使用的是表 (ListObject),因此您可以通过其标题引用 ListColumn。如果您需要列号,可以使用ListColumn.Range.Column - 类似这样。

    Option Explicit
    
    Sub Test()
        Dim lc As ListColumn
        Dim col As Long
    
        Set lc = Sheets("Sheet1").ListObjects("Table1").ListColumns("Data1")
        col = lc.Range.Column
        Debug.Print col
    End Sub
    

    【讨论】:

    • 太棒了。谢谢你。是否可以保持“Sheet1”动态。比如,如果有人更改了工作表的名称。我尝试使用类似... ActiveWorkbook.Sheets.ListObjects 的东西,但它似乎不起作用。你知道这个的语法吗?
    • This answer 可能有用 - 您可以通过其CodeName 引用该工作表。 This 是一个类似的答案。
    • 感谢您的跟进。我检查了一下,发现 Sheet1 是一个参考代码,即使工作表名称发生变化,它也保持不变。但是当我运行以下Set lc = Sheets("Sheet1").ListObjects("Config").ListColumns("Value") 时,我得到一个下标超出范围错误。您知道为什么会发生这种情况吗?
    • 如果您使用的是CodeName,请直接参考Sheet1 - Sheet1.ListObjects...,而不是Sheets("Sheet1").ListObjects...。
    【解决方案2】:

    获取列的语法类似于

    Worksheets("Sheet1").Range("B1").Column
    

    获取单元格B1的列号。

    如果您使用命名范围,这也可以:

    Worksheets("Sheet1").Range("NameOfRange").Column
    

    【讨论】:

    • 感谢您的回复。我需要引用一个实际的表格,因此如果有人要在工作表中移动表格,它将能够使用表格名称和关联的列标题作为参考来获取值。这可能吗?? (很抱歉在我的原始帖子中没有更清楚地说明这一点)
    【解决方案3】:

    我使用了一个更简单的方法:

    =COLUMNS(X[[#Headers],[A]:[B]])
    
    Where:
     X is the Table name
     A is the name of the 1st column 
     B is the name of the column you need.
    

    这个公式是动态的

    【讨论】:

    • 这个问题是关于 VBA,而不是关于公式。
    猜你喜欢
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多