Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:使用2个匹配的变量_Excel_Vba - Fatal编程技术网

Excel VBA:使用2个匹配的变量

Excel VBA:使用2个匹配的变量,excel,vba,Excel,Vba,ws1=工作表1 ws2=工作表2 在ws1上,我有两列下拉框(数据验证列表) 从第一列下拉框中选择的内容将分配给变量“variable_i” 从第二列下拉框中选择的内容将分配给变量“variable_p” 它从ws2中提取数据(范围为a列的所有部分) 它正在使用变量“variable_i”从下拉框中查找选择。。。代码运行良好,它返回D3上的数字行,没有任何问题 我希望它返回包含两列变量(变量I和变量p)的行号 我尝试了以下代码: 正如我在网上看到的,但这对我不起作用 我得到的错误是: “运

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

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

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

  • 从第二列下拉框中选择的内容将分配给变量“variable_p”

  • 它从ws2中提取数据(范围为a列的所有部分)

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

  • 我希望它返回包含两列变量(变量I和变量p)的行号

  • 我尝试了以下代码:

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

我得到的错误是: “运行时错误'1004': 对象“工作表函数”的方法“匹配”失败

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


任何帮助都将不胜感激!

我相信您的关键是使用
EVALUATE()
函数。多个条件意味着您最有可能需要一个
求值
可以识别的数组。同时,连接值和范围以检查两个条件肯定不是最好的解决方案。想象一下单元格
A1=1
B1=101
。如果将范围连接到
1101
并查看对于标准1
10
11
而不是
1
101

一个简单的评估示例:

在我的示例中,我有一个
Long
和一个
String
变量,分别是
1
B
。我是否会使用命名变量
variable\u I
variable\u p
我可以生成如下代码:

Debug.Print Evaluate("MATCH(1,(A1:A6=1)*(B1:B6=""B""),0)")
请注意添加
Long
String
变量的区别?这是因为要在VBA中正确计算,需要在
String
变量周围加两个引号。数字可以不加引号


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

我认为您的关键可能是使用
EVALUATE()
函数。多个条件意味着您最有可能需要一个
求值
可以识别的数组。同时,连接值和范围以检查两个条件肯定不是最好的解决方案。想象一下单元格
A1=1
B1=101
。如果将范围连接到
1101
并查看对于标准1
10
11
而不是
1
101

一个简单的评估示例:

在我的示例中,我有一个
Long
和一个
String
变量,分别是
1
B
。我是否会使用命名变量
variable\u I
variable\u p
我可以生成如下代码:

Debug.Print Evaluate("MATCH(1,(A1:A6=1)*(B1:B6=""B""),0)")
请注意添加
Long
String
变量的区别?这是因为要在VBA中正确计算,需要在
String
变量周围加两个引号。数字可以不加引号


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

谢谢您的帮助!我已经尝试将您的代码调整到我的电子表格中
ws2.Range(“E1”)=Evaluate(“匹配(variable1,(ws2!A:A=“&variable1&”*(ws2!B:B=“&variable2&”“”),0)”
(我将其设置为返回E1上的行号作为测试,最终我会将其分配给一个新变量)问题是,它返回“#NAME?”?"可能我把它改错了?这行不通!你不能在没有引号的情况下将工作表方程和vba组合成一行。我已经具体说明了如何用引号将两者分开。请看你的第一个变量1,恐怕我还是不太明白。在我的示例中,我的两个变量都是字符串,所以我想我不会告诉我们只要我不是在寻找一个匹配的数字,我就不会从你的代码中理解为什么变量名有2&两边都有,为什么有3“连续标记。很抱歉造成混淆,感谢您的帮助!效果很好-现在似乎一切都很好-再次感谢您的帮助!感谢您的帮助!我已尝试将您的代码改编为我的电子表格
ws2.Range(“E1”)=Evaluate(“匹配(variable1,(ws2!a:a=“&variable1&”*(ws2!B:B=“&variable2&”),0)”
(我将其设置为返回E1上的行号作为测试,最终我会将其分配给一个新变量)问题是,它返回“#NAME?”可能我把它改错了?这行不通!你不能在没有引号的情况下将工作表方程和vba组合成一行。我已经具体说明了如何用引号将两者分开。请看你的第一个变量1,恐怕我还是不太明白。在我的示例中,我的两个变量都是字符串,所以我想我不会告诉我们e只要我不想找一个匹配的数字。我不会从你的代码中理解为什么变量名有2个&两边各有一个,为什么一行有3个“标记。很抱歉造成混淆,感谢你的帮助!这很有效-现在看起来一切都很好-再次感谢你的帮助!
Debug.Print Evaluate("MATCH(1,(A1:A6=1)*(B1:B6=""B""),0)")
ws2.Range("D3") = Evaluate("MATCH(1,('Sheet1'!A1:A6=" & variable_i & ")*('Sheet1'!B1:B6=""" & variable_p & """),0)")