Excel 获取匹配值的行
我有一个VBA代码,它正在运行,以获取从一个工作表(工作表TA)到另一个工作表(工作表TB)的匹配值。我想确定在哪个单元格中找到匹配值。由于代码将遍历~10k行,是否有有效的方法获取此信息 当前工作代码如下: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
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只是想让代码运行得更快。