【问题标题】:Excel VBA: Using 2 variables with MatchExcel VBA:使用匹配的 2 个变量
【发布时间】:2019-07-12 22:16:40
【问题描述】:
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 上的数字行没有任何问题

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

  • 我试过下面的代码:

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

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

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

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

任何帮助将不胜感激!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我相信你的关键可能是使用EVALUATE() 函数。多个条件意味着您很可能需要EVALUATE 可以识别的数组。此外,连接值和范围以检查两个标准绝对不是最佳解决方案。想象一下单元格A1=1 和B1=101。如果您将范围连接到1101 并且您寻找标准1 10 和11 而不是1 和101,会发生什么?

    一个简单的评估示例:

    Debug.Print Evaluate("MATCH(1,(A1:A6=1)*(B1:B6=""B""),0)")
    

    在我的示例中,我有一个Long 和一个String 变量,分别是1 和B。我可以使用您的命名变量variable_i 和variable_p 我可以编写如下代码:

    ws2.Range("D3") = Evaluate("MATCH(1,('Sheet1'!A1:A6=" & variable_i & ")*('Sheet1'!B1:B6=""" & variable_p & """),0)")
    

    注意到添加Long 或String 变量的区别了吗?这是因为要在 VBA 中正确评估,String 变量需要有两个引号。数字可以没有。

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

    【讨论】:

    • 感谢您的帮助!我已经尝试将您的代码调整为我的电子表格ws2.Range("E1") = Evaluate("MATCH(variable1,(ws2!A:A=" & variable1 & ")*(ws2!B:B=""" & variable2 & """),0)")(我已将其设置为返回 E1 上的行号作为测试,最终我会将其分配给一个新变量)问题是,它返回“ #姓名?”进入 E1 可能是我改编错了?
    • 这行不通!您不能在没有引号的情况下将工作表方程式和 vba 组合成一行。我已经特别说明了如何用引号将两者分开。
    • 查看你的第一个变量 1
    • 恐怕还是不太明白。在我的示例中,我的两个变量都是字符串,所以我想我不会使用 Long ,因为我不是在寻找要匹配的数字。我没有从您的代码中了解为什么变量名称有 2 和它们的任何一侧以及为什么连续有 3 个 " 标记。抱歉造成混淆,感谢您的帮助!
    • 成功了 - 现在看起来一切都很好 - 再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多