Arrays 使用数组公式将具有多个条件的索引匹配转换为VBA
我有一个表,试图从中检索基于多个条件的数据。我正在为此使用索引匹配。如果我在excel中手动粘贴公式,它在以下两种情况下都有效 首先,我使用索引匹配公式中原始表的完整列范围输入数组公式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
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。无法设置
靶场等级。”
我觉得这个错误是由于应该如何输入的语法风格造成的。
提前感谢您的支持最简单的方法如下:
这就是我获得第二行代码的方式,但在运行VBA代码时,不知何故它不起作用。让我吃惊also@Shaiy10-尝试分别计算
=MATCH(1,(Data!R2C2:R40000C2=R[-1]C2)
,并将它们作为字符串传递给整个公式。可能有效。