【发布时间】:2014-08-08 19:04:59
【问题描述】:
我查看了但找不到针对这种特定情况的有效响应。
我需要编写一个宏,在表格中搜索特定名称(A 列)、材料(B 列)和颜色(C 列)组合,然后从 D 列返回价格。
我可以输入公式(数组)
=INDEX(Sht1!A1:D5552,MATCH(1,(Sht1!A1:A5552=A1)*(Sht1!B1:B5552=B1)*(Sht1!G1:G5552=C1),0),4)
其中 A1 具有我要搜索的项目的名称,B1 具有材料,C1 具有颜色,并且值返回就好了。但是,我已将其设置为在名称/材料/颜色之间快速选择,并且我希望能够快速拉出价格,因此我尝试编写一个宏以在单击按钮时运行。
我遇到的问题是转置 MATCH(1,(Sht1!A1:A5552=A1)(Sht1!B1:B5552=B1)(Sht1!C1:C5552=C1), 0)部分进入VBA。我试图避免只使用记录功能,因为它会以 R1C1 格式吐出一个 .ForumlaArray,这在未来很难解释和更新。
我试过了
Application.Index(Sht1.Range("A1:D5552"), _
Application.Match(1, Sht1.Range("A1:A5552") = Range("A1") & _
"*" & Sht1.Range("B1:B5552") = Range("B1") & "*" & Sht1.Range("C1:C5552") = _
Range("C1"), 0), 4)
但是得到一个类型不匹配
我也尝试放入 .ForumlaArray 但出现“无法设置范围类的 FormulaArray 属性”错误(因为它需要 R1C1 格式)
"=INDEX(Sht1!A1:D5552,MATCH(1,(Sht1!A1:A5552=A1)*(Sht1!B1:B5552=B1)*(Sht1!C1:C5552=C1),0),4)"
我的变量设置略有不同,但我正在尝试简化这些示例以使其更易于解释。
【问题讨论】:
-
我认为 VBA 对于您在这里尝试做的事情来说太过分了。只是为了确保:您的预期解决方案是能够选择名称、材料和颜色,并在单击按钮时返回价格,对吗?您认为 VBA 的哪些方面可以让您更快地选择这些?
-
我很困惑 VBA 如何让这变得更快?您不需要更新包含正在搜索的名称、材质和颜色的单元格吗?
-
我有一个包含 600 多个名称的列表,每个名称都有多种材料/类型(超过 5000 种可能性)。此外,我有 6 个单独的价目表。我正在制作一个带有相关下拉列表的表单,以便轻松找到名称/垫子/颜色,然后是一个按钮,该按钮将填写规格,然后列出该项目的每个列表中的价格。我正在设置它,所以如果我需要来自多个列表的 6 件商品的价格,我可以轻松地选择它们并拉出价格。我假设 VBA 是最简单的方法。