2016-12-09 54 views
1

我有一个VBA公式,假设使用范围()在Excel中使用数组公式2013

Range("B2:B" & Cells(Rows.Count, "A").End(xlUp).Row).FormulaArray = "=MATCH(RC[-1],Sheet1!C1,0)" 

当我运行宏它进入每个单元

=MATCH(A2,Sheet1!A:A,0) 

我想RC[-1]这参数返回单元格A2,A3,A4等。它目前正在为所有行返回A2。我该怎么做呢?

我也试过ActiveCell.FormulaArray和一个for循环,但它对于我所拥有的行数太慢了。

+0

如果你想将它作为一个数组输入,这个简单的Match不是,你需要先输入到B2中,然后填充到底部。 '.FormulaArray'会将它视为如果突出显示整个范围并将公式放在第一个单元格中,然后按下Ctrl-Shift-Enter即可在所有单元格中输入相同的公式。 –

+0

@ScottCraner是否有办法按Ctrl-Shift-通过VBA单独输入所有单元格,而不涉及循环遍历所有单元格?我尝试了一个for循环,但它非常慢,甚至比手动执行还要慢。 – jjjjjjjjjjj

+0

请参阅下面的答案。 –

回答

1

正如所有的评论中指出:

你需要将它进入B2,然后再填写下到谷底。

.FormulaArray将对待它,就好像您突出显示了整个范围并将公式放入第一个单元格中,然后按下Ctrl-Shift-Enter即可在所有单元格中输入相同的公式。

Range("B2").FormulaArray = "=MATCH(RC[-1],Sheet1!C1,0)" 
Range("B2:B" & Cells(Rows.Count, "A").End(xlUp).Row).FillDown 
+0

运行需要很长时间。这是我必须单独处理和优化的东西,但它的工作原理。谢谢。 – jjjjjjjjjjj

+0

@jjjjjjjjjjj您可能想要查看将数据加载到内存数组中,并执行数组公式正在执行的计算,并将输出存储到另一个数组中,然后将其全部一次发布。数组公式非常耗费,并且根据数量和参考数据甚至可能导致excel崩溃。我只使用Array公式获得很少的答案。 –

1

尝试改变FormulaArrayFormulaR1C1

Range("B2:B" & Cells(Rows.Count, "A").End(xlUp).Row).FormulaR1C1 = "=MATCH(RC[-1],Sheet1!C1,0)" 

谢谢!

+0

谢谢,但它不起作用,因为它是一个数组公式。我如何结合R1C1和数组符号? – jjjjjjjjjjj

+0

@jjjjjjjjjjj简单匹配不是数组公式。 –

+0

@ScottCraner这不是,但真正的公式是。这个问题很长而且没有必要(除了知道它是一个数组公式),所以为了简单起见我对它进行了编辑。 – jjjjjjjjjjj