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)
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
8条答案
按热度按时间w8f9ii691#
在您的示例中,如下所示:
siotufzp2#
一个简短的回答是:
更干净,更容易!
qpgpyjmq3#
有什么理由应该避免使用这种方法吗?
ThisWorkbook.Worksheets("MyWksht").Range("TableName[ColumnTitle]").Cells(RowNumber)
在我看来似乎是最简单的答案。
zmeyuzjn4#
在我看来,@Salam Morcos解决方案不会给予正确的答案。如果表格从单元格
A2
开始,则语句[MyTable[FirstColumnName]].Column
将给出值2。正确的解决方案是:yduiuuwa5#
就像这样简单。如果您通过列的名称调用,则该范围的列索引将为1,因此:
inb24sb26#
如果你想写得简短些:
utugiqy67#
简单得多,动态得多:
6pp0gazn8#
我创建了这个函数,它可以按如下方式返回你想要的值。
用法示例:获取表值(您的表名称,“ID”,3,“表头4”)