vba excel匹配多个标准

时间:2013-03-01 19:50:53

标签: excel excel-vba vba

任何帮助将不胜感激。这看起来像是一个常见问题,但我在vba中找不到任何问题。这是我最好的镜头:

Dim oppositeRow As Long
.....
oppositeRow = WorksheetFunction.Match(ddate & campaign, "A3:B62", 0)

2 个答案:

答案 0 :(得分:5)

如果您知道只有一个匹配结果,则可以执行以下Excel公式:

=SUMPRODUCT(ROW(A2:A5), N("john"=A2:A5), N("smith"=B2:B5))

适用于以下工作表:

      A      B
1     first  last
2     bob    smith
3     john   smith    
4     john   brown
5     sam    brown

这将返回3(因为john smith位于第三行),由于标题行,您必须减去1才能将索引放入表中。

这通过将三个向量相乘来起作用:

  1. 第一个,ROW(A2:A5),只是{2,3,4,5}。
  2. 第二个,N(“john”= A2:A5),是{0,1,1,0}。 N()采用向量{false,true,true,false}并将其转换为数字。
  3. 第三个,N(“史密斯”= B2:B5)是{1,1,0,0}。同样处理N()。
  4. 将向量乘以元素得到{0,3,0,0},其总和为3.

    在VBA中表达一个复杂的公式有点尴尬,所以如果你想纯粹在VBA中做这个,我建议你只用一个计数器做一个循环并记录你找到符合你标准的行的索引

    编辑:这是一些VBA代码:

    Dim index as Integer
    For index = 1 to 4
        If Range("A1").Offset(index).Value = "john" And Range("B1").Offset(index).Value = "smith" Then
            Exit For
        End If
    Next index
    

答案 1 :(得分:3)

只要在工作表中添加用于表示行号的列,就可以使用DGET公式完成此操作。

rowID  column1  column2
1       A       aa
2       B       bb
3       C       cc
4       D       dd
5       E       ee

然后是公式:

=DGET(A1:C6;1;E1:F2)

这假设上述数据位于A1:C6以下数据块,其中包含的搜索条件位于E1:F2

column1  column2
C        cc

上面列出的DGET公式的返回值为“3”。

如果您的VBA方法在运行E2公式之前将正确的搜索条件放入单元格F2DGET,则可以在VBA中完全执行此操作。

相关问题