索引使用数组公式匹配多个条件转换为VBA

时间:2018-06-12 12:52:54

标签: arrays vba indexing match multiple-columns

我有一张表,我试图根据多个条件检索数据。我正在使用Index Match。如果我手动将公式粘贴到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.无法设置的公式数组属性   范围类。“

我觉得错误是由于应该如何输入的语法风格。 在此先感谢您的支持

1 个答案:

答案 0 :(得分:0)

最简单的方法如下:

  1. 在Excel中编写公式;
  2. 转到开发人员标签,然后点击"录制宏";
  3. 在点2之前,点击这个小方块:
  4. enter image description here

    1. 然后用公式按几下单元格,它将被翻译成#34 ;;