Excel 获取匹配值的行

Excel 获取匹配值的行,excel,vba,Excel,Vba,我有一个VBA代码,它正在运行,以获取从一个工作表(工作表TA)到另一个工作表(工作表TB)的匹配值。我想确定在哪个单元格中找到匹配值。由于代码将遍历~10k行,是否有有效的方法获取此信息 当前工作代码如下: Sub ChkRcd() Dim r, lastRow, colCaseID As Long Dim rng As Range Dim strColName As String Dim caseIDCol As String 'Case ID Col Na

我有一个VBA代码,它正在运行,以获取从一个工作表(工作表TA)到另一个工作表(工作表TB)的匹配值。我想确定在哪个单元格中找到匹配值。由于代码将遍历~10k行,是否有有效的方法获取此信息

当前工作代码如下:

Sub ChkRcd()

    Dim r, lastRow, colCaseID As Long
    Dim rng As Range
    Dim strColName As String
    Dim caseIDCol As String 'Case ID Col Name In WorksheetB
    r = 2

    Sheets("WorksheetA").Select
    lastRow = getLastRow

    colCaseID = FindColHeaderWText("WorksheetB", "ExternalDataReference")
    strColName = Col_Letter(colCaseID)
    Set rng = Worksheets("WorksheetB").Columns(colCaseID)

    Sheets("WorksheetA").Select
    Range("G2").Select

    For r = 2 To lastRow
        If Not IsError(Application.Match(Cells(r, 1).Value, rng, 0)) Then
        'Do stuff when the match is found
            Cells(r, 7).Value = "Yes - Row " 'Show Row Number here
        Else:
            Cells(r, 7).Value = "No"
            'Highlights the rows with no match
            Rows(r & ":" & r).Select
            With Selection.Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .ThemeColor = xlThemeColorAccent4
                .TintAndShade = 0.599993896298105
                .PatternTintAndShade = 0
            End With
        End If
    Next r

    Range("A1").Select

End Sub

调用
Application.Match(…)
返回行号。它还可以返回一个错误,因此我们必须将它存储到一个变量中(带有错误检查),然后根据需要使用它

Dim rowMatch as Long
...
...
On Error Resume Next
rowMatch = Application.Match(Cells(r, 1).Value, rng, 0)

If err.Number <> 0 then
    rowMatch = 0
    Err.Clear
End if 

'Use rowMatch as needed
Dim rowMatch尽可能长
...
...
出错时继续下一步
rowMatch=Application.Match(单元格(r,1).Value,rng,0)
如果错误号为0,则
行匹配=0
呃,明白了
如果结束
'根据需要使用rowMatch

您希望如何存储单元格地址?您的代码是否太慢?运行循环时,您是否尝试挂起屏幕更新和计算?我将更新它以挂起屏幕更新!我愿意以任何有帮助的方式存储单元格地址。
Application.Match
不会引发找不到匹配的错误-只有在使用
Application.WorksheetFunction.Match
时才会发生这种情况。即使我尝试使用:Cells(r,7)。Value=“Yes.Row”&rng.Cells.Row,该值仍会返回1。这是因为我使用的Application.math公式吗?@JK0124在您的例子中,
rng
指的是您正在查找的整个范围。
Application.Match
函数返回匹配的行号。因此,我建议将
Application.Match
的结果存储到一个变量中,以便事后使用。在上面的代码中,我将该数字存储在
rowMatch
中。因此,您可以调用'Cells(r,7).value=“Yes.Row”&rowMatch.@TimWilliams我发布的示例在尝试将
应用程序.Match的结果存储到一个长维度的变量中时抛出一个错误,这可能会抛出一个错误。根据他的帖子,他希望存储与匹配对应的行号。要做到这一点,他应该将函数的结果存储在一个变量中,此时他可以在条件中使用它作为谓词,也可以在需要时使用行号。有没有更好或更有效的方法来处理这个问题?对不起,我完全误解了这个问题。。。假设OP只是想让代码运行得更快。