Arrays 使用数组公式将具有多个条件的索引匹配转换为VBA

Arrays 使用数组公式将具有多个条件的索引匹配转换为VBA,arrays,vba,indexing,match,multiple-columns,Arrays,Vba,Indexing,Match,Multiple Columns,我有一个表,试图从中检索基于多个条件的数据。我正在为此使用索引匹配。如果我在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:C

我有一个表,试图从中检索基于多个条件的数据。我正在为此使用索引匹配。如果我在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。无法设置 靶场等级。”

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

最简单的方法如下:

  • 在Excel中编写公式
  • 转到“开发人员”选项卡,单击“录制宏”
  • 在执行第2点之前,单击此小正方形:
  • 然后用公式按下单元格几次,就会被“翻译”
    这就是我获得第二行代码的方式,但在运行VBA代码时,不知何故它不起作用。让我吃惊also@Shaiy10-尝试分别计算
    =MATCH(1,(Data!R2C2:R40000C2=R[-1]C2)
    ,并将它们作为字符串传递给整个公式。可能有效。