如何按数字引用表中的多个列

  • 本文关键字:何按 数字 引用 excel vba
  • 更新时间 :
  • 英文 :


我想使用 Application.Match 来查找表的一行并将其存储在数组中。我让它用于搜索单个列:

With Worksheets("Data").ListObjects(tblName)
myArray = Application.Transpose(Application.Transpose(.ListRows( _
Application.Match(searchTerm, .ListColumns(1).DataBodyRange, 0 _
).Range)))
End With

但是我想用这个子查看的一些表格可能在第 2 列中有searchTerm,所以我想扩展Application.Match" to the 1st and 2nd columns. I've heard about using中提到的范围。调整大小(,2(' 但我无法让它工作。今天我发现了结构化引用,我可以像这样引用列:

Worksheets("Data").Range("tblName[[Column1]:[Column2]]").Activate

但这需要我通过标题名称来引用列,这些标题名称在表之间有所不同,并且我希望能够使用它们的编号。有谁知道如果在第一列中找不到searchTerm则不涉及循环的解决方案?

更新:

提供有关我的问题的更多信息。

  1. 用户选择一个包含字符串的单元格。字符串在数组instruction中分为 2 个元素。

  2. instruction(0) =我要查找的表的名称。instruction(1) =我正在寻找的术语。该术语可放在第1栏或第2栏中。

  3. 然后,包含instruction(1)的表instruction(0)行将加载到另一个名为interactData的数组中

  4. 每个表都有自己的 sub,它使用interactData的元素来做不同的事情。

这是我能够想到的解决方法:

Dim headers As Variant
headers = Application.Transpose(Application.Transpose(Data.Range(instruction(0) & "[#Headers]")))
interactData = Application.Transpose(Application.Transpose(Data.ListObjects(instruction(0)).ListRows( _
Data.Range(instruction(0) & "[[" & headers(1) & "]:[" & headers(2) & "]]").Find(instruction(1)).Row - 2 _
).Range))
Erase headers

我使用另一个数组headers来存储列的名称,然后在Range().Find().Row函数的结构化引用中使用了headers(1)headers(2)。不幸的是,.DataBodyRange这种方法效果不佳,所以我不得不从行结果中减去 2,因为表格的第 1 行位于工作表的第 3 行。

最新更新