【问题标题】:Index Match with multiple criteria conversion to VBA using an array formula使用数组公式将多个条件转换为 VBA 的索引匹配
【发布时间】:2018-11-21 21:14:16
【问题描述】:

我有一个表,我试图根据多个条件从中检索数据。我为此使用索引匹配。如果我手动将公式粘贴到 excel 中,它适用于以下两种情况。

首先我使用索引匹配公式中原始表中的完整列范围输入数组公式

    Selection.FormulaArray = _
    "=IF(ISNA((INDEX(Data!C2:C8,MATCH(1,(Data!C2=RC2)*(Data!C3=RC3)*(Data!C4=R3C)*(Data!C5=R4C),0),4))),""F"",(INDEX(Data!C2:C8,MATCH(1,(Data!C2=RC2)*(Data!C3=RC3)*(Data!C4=R3C)*(Data!C5=R4C),0),4)=R4C))"

这很有效,但对于大数据来说运行速度非常慢。因此,我修改了表格中特定范围的公式,例如30000 行。当我在 excel 中手动输入行和列引用时,这有效,这也大大减少了处理时间。但是当我尝试使用 R1C1 样式通过 VBA 中的代码使用它时会引发错误。以下是范围为 40000 行的代码示例

    Selection.FormulaArray = _
    "=IF(ISNA((INDEX(Data!R2C2:R40000C8,MATCH(1,(Data!R2C2:R40000C2=R[-1]C2)*(Data!R2C3:R40000C3=R[-1]C3)*(Data!R2C4:R40000C4=R3C)*(Data!R2C5:R40000C5=R4C),0),4))),""F"",(INDEX(Data!R2C2:R40000C8,MATCH(1,(Data!R2C2:R40000C2=R[-1]C2)*(Data!R2C3:R40000C3=R[-1]C3)*(Data!R2C4:R40000C4=R3C)*(Data!R2C5:R40000C5=R4C),0),4)=R4C))"

显示的错误是

“运行时错误 1004。无法设置公式数组属性 范围类。”

我觉得这个错误是由于应该如何输入的语法风格造成的。 提前感谢您的支持

【问题讨论】:

    标签: arrays vba indexing match multiple-columns


    【解决方案1】:

    最简单的方法如下:

    1. 在 Excel 中编写公式;
    2. 转到“开发者”选项卡并点击“录制宏”;
    3. 在执行第 2 点之前,点击这个小方块:

    1. 然后按几下有公式的单元格,就会“翻译”出来;

    【讨论】:

    • 这就是我获得第二行代码的方式,但是在运行VBA代码时不知何故它不起作用。我也很惊讶
    • @Shaiy10 - 尝试分别评估 =MATCH(1,(Data!R2C2:R40000C2=R[-1]C2) 并将它们作为字符串传递给整个公式。可能会工作。
    猜你喜欢
    • 1970-01-01
    • 2019-05-17
    • 2014-02-09
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    相关资源
    最近更新 更多