Excel VBA:将2个变量与Match

时间:2019-07-12 22:16:40

标签: excel vba

ws2.Range("D3").Value = Application.WorksheetFunction.Match(variable_i, ws2.Range("A:A"), 0)

ws1 =工作表1 ws2 =工作表2

  • 在ws1上,我有2列下拉框(数据验证列表)

  • 从下拉框中的第一列中选​​择的内容分配给变量“ variable_i”

  • 下拉列表第二栏中的选择被分配给变量“ variable_p”

  • 它从ws2提取数据(范围是a列的全部)

  • 它正在使用变量“ variable_i”从下拉框中寻找选择...代码运行良好,它返回D3上的数字行而没有任何问题

  • 我正在寻找它返回包含两列(variable_i和variable_p)两个变量的行号

  • 我尝试了以下代码:

ws2.Range("D3").Value = Application.WorksheetFunction.Match(variable_i & variable_p, ws2.Range("A:B"), 0)

正如我在网上看到的那样,但这对我不起作用。

我得到的错误是: “运行时错误'1004': 对象“ WorksheetFunction”的“匹配”方法失败

查找多个变量的最佳方法是什么?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我相信对您来说,关键是可以使用select函数。多个条件意味着您很可能需要EVALUATE()可以识别的数组。同样,将值和范围连接起来以检查两个条件绝对不是最佳解决方案。想象一下EVALUATEA1=1单元格。如果将范围连接到B1=101并查找条件1 110110而不是111,会发生什么情况?

一个简单的评估示例:

enter image description here

101

enter image description here

在我的示例中,我有一个Debug.Print Evaluate("MATCH(1,(A1:A6=1)*(B1:B6=""B""),0)") 和一个Long变量,分别是String1。我是否可以使用您的命名变量Bvariable_i编写以下代码:

variable_p

是否注意到添加ws2.Range("D3") = Evaluate("MATCH(1,('Sheet1'!A1:A6=" & variable_i & ")*('Sheet1'!B1:B6=""" & variable_p & """),0)") Long变量的区别?这是因为要在VBA中正确评估,String变量周围必须有两个引号。没有数字就可以做到。

还请注意,我在代码中指定了工作表名称,您可以根据需要进行更改