通过表头名称和行号引用表格中的Excel单元格

nzk0hqpo  于 2022-11-18  发布在  其他
关注(0)|答案(8)|浏览(151)

我尝试使用VBA通过使用表格标题名称和行号来引用Excel表格中的单元格。
我该怎么做?

w8f9ii69

w8f9ii691#

在您的示例中,如下所示:

Dim tb As ListObject
'assumes Table is the first one on the ActiveSheet
Set tb = ActiveSheet.ListObjects(1)
MsgBox tb.DataBodyRange.Cells(2, tb.ListColumns("header4").Index)
siotufzp

siotufzp2#

一个简短的回答是:

MsgBox [MyTable].Cells(2, [MyTable[MyColumn]].Column)

更干净,更容易!

qpgpyjmq

qpgpyjmq3#

有什么理由应该避免使用这种方法吗?
ThisWorkbook.Worksheets("MyWksht").Range("TableName[ColumnTitle]").Cells(RowNumber)
在我看来似乎是最简单的答案。

zmeyuzjn

zmeyuzjn4#

在我看来,@Salam Morcos解决方案不会给予正确的答案。如果表格从单元格A2开始,则语句[MyTable[FirstColumnName]].Column将给出值2。正确的解决方案是:

MsgBox [MyTable].Cells(2, [MyTable].Column-[MyTable[MyColumn]].Column + 1)
yduiuuwa

yduiuuwa5#

就像这样简单。如果您通过列的名称调用,则该范围的列索引将为1,因此:

msgbox ActiveSheet.ListObjects(1).ListColumns("header4").DataBodyRange(2,1).value
inb24sb2

inb24sb26#

如果你想写得简短些:

[MyTable[header4]].Rows(2)
utugiqy6

utugiqy67#

简单得多,动态得多:

ThisWorkbook.Worksheets("WorkSheet_Name").Range("Table_Name").Rows(Table_row_number).Select
6pp0gazn

6pp0gazn8#

我创建了这个函数,它可以按如下方式返回你想要的值。
用法示例:获取表值(您的表名称,“ID”,3,“表头4”)

Function GetTableValue( _
  ByRef table As ListObject, _
  ByVal columnNameForKeyValue As String, _
  ByVal keyValue As Variant, _
  ByVal columNameForReturnValue As String _
) As Variant

  Dim rowIndex As LongPtr
  Dim columnIndex As LongPtr

  On Error GoTo ErrorHandling

  rowIndex = Application.Match(keyValue, 
  table.ListColumns(columnNameForKeyValue).DataBodyRange, 0)

  columnIndex = table.ListColumns(columNameForReturnValue).Index

  GetTableValue = table.DataBodyRange.Cells(rowIndex, columnIndex).value

  Exit Function

  ErrorHandling:

  GetTableValue = "Error: Review inputs"

End Function

相关问题