简体   繁体   English

如何在excel VBA中根据行和列ID查找单元格值

[英]How to find cell value based on row and Column ID in excel VBA

Need a VBA Sub to find a cell value based on Row and Column ID.需要一个 VBA Sub 来根据行和列 ID 查找单元格值。 In the example below I need to select the value where East and RT3 intersect which is 80.在下面的示例中,我需要选择 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

Use similar to below not tested :使用类似于以下未测试

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

There are different ways to do this, but one approach is to use a function with parameters.有不同的方法可以做到这一点,但一种方法是使用带参数的函数。 You didn't say how you intent to pass the parameters, so I just used a sub to call the function.你没有说你打算如何传递参数,所以我只是用一个子来调用函数。

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

I know I'm late to the game but maybe for future people.我知道我迟到了,但也许对未来的人来说。 I came up with this:我想出了这个:

It takes a ListObject table in which it will find interesting cell and return it's string.它需要一个 ListObject 表,它会在其中找到有趣的单元格并返回它的字符串。

Returns ERROR when a) table name is not found, b) row or c) column name not found (it's up to you how you edit this)当 a) 未找到表名,b) 行或 c) 未找到列名时返回 ERROR(这取决于您如何编辑)

Should take around: 0.0005s (5E-04s)大约需要: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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM