excel - VBA - 从多个条件中查找行
问题描述
我以前也走过这条路。匹配功能在我使用单个标准时有效,但我无法使用两个标准正确使用它。
我当前的程序在 NR_Qualtrics 页面上查找 CaseID 和电子邮件的匹配项。因为这些列可能会根据我获得的每个文档而有所不同,所以我有一个程序可以识别行并返回 CaseID 和 Email 所在的范围。
我在这个函数中做的下一件事是遍历 NonResidential 工作表中的每一行,试图在 CaseID 和 Email 上找到匹配项。我需要该函数返回找到匹配项的行并在 O 列中报告该行。目前,我仍在尝试查找匹配的列。我在调试时不断收到错误 2015 和错误 2029。当我手动查看匹配项时,我确信匹配项存在。我不确定我的程序做错了什么。你能帮忙吗?
Sub NonResFindMultipleProviders()
'This function finds any duplicate Case IDs for NR providers where they had surveys
'This function needs to run before NonRes_ChkSurveyRcd
'If there are duplicates, it will indicate that in the Notes Column (N)
'If a duplicate exists, then it must match on Email and CaseID and show the value of Yes-NR_Qualtrics Row XX/No in Survey Recieved (Column O)
Application.ScreenUpdating = False
Dim r, lastRow, rowMatch As Long
Dim colCaseID, colEmail, colResponseID As Long
Dim rngCaseID, rngEmail, rngResponseID As Range
Dim valEmail, valCaseID As String
Dim result As Variant
Dim shtNR As Worksheet
Dim shtQNR As Worksheet
Sheets("NonResidential").Select
lastRow = getLastRow
Range("A2").Select
Set shtNR = ThisWorkbook.Sheets("NonResidential")
Set shtQNR = ThisWorkbook.Sheets("NR_Qualtrics")
colCaseID = FindColHeaderWText("NR_Qualtrics", "ExternalDataReference")
Set rngCaseID = Worksheets("NR_Qualtrics").Columns(colCaseID)
colEmail = FindColHeaderWText("NR_Qualtrics", "EmailAddress")
Set rngEmail = Worksheets("NR_Qualtrics").Columns(colEmail)
'colResponseID = FindColHeaderWText("NR_Qualtrics", "ResponseID")
'Set rngResponseID = Worksheets("NR_Qualtrics").Columns(colResponseID)
'The Notes field(column N) shows the duplicates. Find matches on CaseID AND Email
''Not (IsError(Application.Match(Cells(r, 1).Value, rng, 0))) And
For r = 2 To lastRow
valCaseID = Cells(r, 1).Value 'Column A (1) has CaseIDs
valEmail = Cells(r, 12).Value 'Column L (12) has emails
result = shtNR.Evaluate("MATCH(" & valCaseID & "&" & valEmail & ",rngCaseID&rngEmail,0)")
If (Not IsError(result)) Then 'Mark only if Notes - Column N (13) is marked with a duplicate - Need to put this in next. RN, just evaluate everything
Cells(r, 15).Value = "Yes" 'Column O (14) Survey Recieved marked with Yes
End If
Next r
'Cleanup - Remove the words duplicate
'Columns("N:N").Select
'Selection.Replace What:="Duplicate", Replacement:="", LookAt:=xlWhole, _
' SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
' ReplaceFormat:=False
Application.ScreenUpdating = True
End Sub
解决方案
这是一个基于 3 个条件进行匹配的示例。尝试将您的范围和标准放入其中:
Sub MatchMultipleCritera()
' Cells containing the values to match
Dim criteria1 As Range, criteria2 As Range, criteria3 As Range
Set criteria1 = Range("A1")
Set criteria2 = Range("B1")
Set criteria3 = Range("C1")
' Ranges containing the values to be checked against the match values above.
Dim rng1 As Range, rng2 As Range, rng3 As Range
Set rng1 = Range("Table1[Item]")
Set rng2 = Range("Table1[Active]")
Set rng3 = Range("Table1[Quanitity2]")
MsgBox "Row " & Evaluate("=MATCH(1,(" & criteria1.Address & "=" & rng1.Address & ")*(" & criteria2.Address & "=" & rng2.Address & ")*(" & criteria3.Address & "=" & rng3.Address & "))")
End Sub
在这个例子中:
- 单元格 A1、B1 和 C1 包含我匹配的值。
- 我正在查看一个
Excel.ListObject
名为“Table1”的表 (),其中包含“Item”、“Active”和“Quantity”列。 rng1
检查criteria1
,rng2
forcriteria2
等中的值。- 结果是行号。
这是使用数组公式对这篇 ExcelJet 文章的 VBA 修改。该Evaluate
函数默认将公式计算为数组公式
推荐阅读
- firebase - 具有多种功能的 Firebase 功能
- batch-file - 从 for 循环中的变量中减去特定字符串
- python - 数组列表程序卡住
- r - R dplyr select() 不工作并且没有错误代码
- visual-studio-code - 安装在 Windows 中的 VS Code 在 WSL Ubuntu 18.04 下运行
- arrays - 在 C 中检查每个元素的值并返回 true 或函数
- html - 我该如何解决这个错误:eval_tidy 中的错误(xs [[j]],掩码):找不到对象“标题”
- android - 使用 Kotlin 在 Android 上加载活动后如何使用 GridView 项目
- .htaccess - 如何使用 htaccess 删除部分 url
- python - python Matplotlib 冻结与线程