在匹配多个条件的范围内搜索行

Search for Row in Range Matching Multiple Criteria

提问人:MonroeGA 提问时间:11/29/2022 最后编辑:braXMonroeGA 更新时间:11/29/2022 访问量:43

问:

我正在尝试在 Excel VBA 中搜索与多个条件匹配的行。基本上,当我双击单元格时,我需要知道单击的值是否存在于另一个工作表中,但也满足两个附加条件。

我正在使用 Application.WorksheetFunction 方法,尝试实现此 Excel 公式:

=MATCH(1,INDEX((A1=rng2)*(B1=rng3)*(C1=rng4),0,1)

此公式适用于电子表格(直接在 Excel 中,而不是 VBA),返回正确的行号:

=MATCH(1,INDEX((TRIM("nasdbpha04")=$D$3:$D$2000)*("Local"=$P$3:$P$2000)*($AQ$1=$AQ$3:$AQ$2000),0,1),0)

当我尝试在 VBA 的 WorkSheet_BeforeDoubleClick 事件中实现相同的内容时,以下给出了运行时错误“13” - 类型不匹配。我的代码如下:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 
  Dim row As Long
  Dim dtMax As Date   'corresponds to $AQ$1 above (only put in $AQ$1 to test the formula)
  Dim rng1 As Range
  Dim rng2 As Range
  Dim rng3 As Range
  Dim rng4 As Range

  Set rng2 = Sheets("DB2 Databases").Range("$d$3:$d$2000")
  Set rng3 = Sheets("DB2 Databases").Range("$p$3:$p$2000")
  Set rng4 = Sheets("DB2 Databases").Range("$aq$3:$aq$2000")
  
  dtMax = Application.WorksheetFunction.Max(rng3)
  
  row = Application.WorksheetFunction.Match(1, Application.WorksheetFunction.Index((Trim(Target.Value) = rng2) * ("Local" = rng3) * (dtMax = rng4), 0, 1), 0)
 
End Sub

将 Sub 中的变量与公式进行比较: Target.Value = “nasdbpha04” 和 dtMax = 电子表格中的 $AQ$1(但仅限于电子表格中用于测试目的)

我知道我可以交替编写一个函数来执行查找命令,然后检查该行是否满足其他两个条件,如果没有,则遍历直到找不到任何条件。但是,由于该公式在Excel中有效,因此我认为应该有一种方法可以使用WorksheetFunction在VBA中使其工作。

关于我应该纠正什么或采取不同做法的任何建议将不胜感激。

谢谢。

Excel VBA 匹配

评论

2赞 BigBen 11/29/2022
将公式用作文本。或者用于查看其他工作表中是否存在与您的条件匹配的值,除非您特别需要查找匹配的行。Me.EvaluateWorksheetFunction.CountIfs

答: 暂无答案