如何通过名称来引用列(例如“ someColumn”)?

时间:2018-07-24 16:27:08

标签: excel vba excel-vba

我如何引用名为A列的A列? (请参阅第一个图像)我在互联网上找到的大多数答案似乎都在实际列中包含一个列名(第二张图片),并使用find函数或match函数。但是,我宁愿按名称来标识列,所以可以说做类似Range(“ apple1:apple10”)的事情。

What I want

Not what I want

为此,我正在制作一个带有大量公司宏的Excel工作表,但是很快就要离开了,我希望该工作表尽可能坚不可摧且灵活,以便用户可以在工作表中更改数据甚至添加或删除列。他们不了解VBA,也没有时间更改我的代码。但是,如果他们添加一列,则会弄乱我的宏,该宏当前引用诸如Cells(4,7)之类的单元格,因此,如果您在第7列之前添加一列,则内容将被错误引用。

我考虑过的另一种解决方案是监视用户何时添加或删除列,但这似乎工作量很大,可能会引入太多错误,并且花费的时间太长,而我可以通过按列名来引用列用户不用更改,会简单得多。

任何想法都很棒。谢谢!

2 个答案:

答案 0 :(得分:1)

改为使用命名范围。如果插入了列并且它们仍然有效,则这些将移位。

例如,A1:A7在这里被命名为“ Apple”

Apple

如果我在A:A之前插入一列,那么“ Apple”仍将引用相同的单元格,但现在是B1:B7


在VBA中,您可以访问此范围内的单元格。例如,“ Apple”范围内的第一个单元格:

Range("Apples").Cells(1,1)

这些可以是动态范围,例如,仅占据一列的填充部分,比设置整个列更有效。


了解命名范围here.

答案 1 :(得分:1)

将范围转换为表格。选择您范围内的任何单元格:

any one cell is selected inside the data range

然后从 Home 功能区中,单击格式化为表格并选择任何样式。

"Format as Table" dropdown

您的表具有标题,因此请选中该复选框:

"Format as Table" dialog

恭喜,您现在有了一个-您可以从表工具功能区选项卡重命名它:

Table1

现在,您可以利用Excel中table formulas的强大功能:

table formula

...在VBA中,您可以使用出色的ListObject API:现在Sheet1.ListObjects(1).DataBodyRange为您提供了一个Range引用,其中包含整个 body 表中的数据,最好的是,您不再需要计算数据的最后一行。

Dim myTable As ListObject
Set myTable = Sheet1.ListObjects("Table1")
With myTable.ListColumns("Banana").DataBodyRange
    '...
End With