需要VBA Sub才能根据行和列ID查找单元格值。 在下面的例子中,我需要选择East和RT3相交的值,即80。
A B C D E 1 null RT1 RT2 RT3 RT4 2 North 31 40 78 11 3 South 32 41 79 12 4 East 33 42 80 13 5 West 34 43 81 14
答案 0 :(得分:3)
使用类似于以下未经测试的:
Function getcell(ct as string, rt as string) as range
With activecell
R = .columns("A").find(rt).row
C = .rows("1").find(ct).Column
'The below will escape the function if none where found
If r = nothing or c = nothing then exit function
Set getcell = .cells(r, c)
End with
End function
答案 1 :(得分:0)
有不同的方法可以做到这一点,但一种方法是使用带参数的函数。你没有说你打算如何传递参数,所以我只使用了一个子来调用函数。
Function GetValue(row As Integer, col As Integer)
GetValue = ActiveSheet.Cells(row, col)
End Function
Sub CallGetValue()
Dim cellval As String
cellval = GetValue(row:=4, col:=4)
MsgBox (cellval)
End Sub
答案 2 :(得分:0)
我知道我迟到了,但也许是为了未来的人。我想出了这个:
它需要一个 ListObject 表,它会在其中找到有趣的单元格并返回它的字符串。
当 a) 未找到表名,b) 行或 c) 未找到列名时返回 ERROR(这取决于您如何编辑)
大约需要:0.0005s (5E-04s)
Public Function GetTableVal(ByVal tblName As String, ByVal rowName As String, ByVal colName As String) As String
On Error Resume Next
Dim rng As Range
Set rng = Range(tblName)
On Error GoTo 0
If rng Is Nothing Then
GetTableVal = "ERROR: Table not found"
Exit Function
End If
Dim tbl As ListObject
Set tbl = rng.ListObject
On Error Resume Next
Dim colIndex As Long
colIndex = tbl.ListColumns(colName).INDEX
On Error GoTo 0
If colIndex = 0 Then
GetTableVal = "ERROR: Column not found"
Exit Function
End If
Dim rowIndexRange As Range
Set rowIndexRange = tbl.ListColumns(1).Range.Find(rowName, LookIn:=xlValues, LookAt:=xlWhole)
If rowIndexRange Is Nothing Then
GetTableVal = "ERROR: Row not found"
Exit Function
End If
Dim rowIndex As Long
rowIndex = rowIndexRange.row - tbl.Range.row + 1
Dim res As Range
Set res = tbl.Range(rowIndex, colIndex)
GetTableVal = res.value
End Function