0

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

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

2 回答 2

6

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

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

应用于以下工作表:

      AB
1 先到后
2 鲍勃史密斯
3 约翰·史密斯    
4 约翰布朗
5山姆布朗

这将返回 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("smith"=B2:B5),是 {1,1,0,0}。同样处理 N()。

将向量按元素相乘得到 {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
于 2013-03-01T20:05:24.810 回答
3

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

行 ID 列 1 列 2
1个氨基酸
2 BB
3 立方厘米
4 天
5 EE

那么公式是:

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

这里假设上面的数据在A1:C6 下面的数据块中,其中包括搜索条件被放在E1:F2

列 1 列 2
抄送

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

如果您的 VBA 方法将正确的搜索条件放入单元格E2F2在运行DGET公式之前,您可以纯粹在 VBA 中执行此操作。

于 2013-03-01T20:24:57.103 回答