Arrays Excel整列引用数组公式太慢,不考虑UsedRange?

Arrays Excel整列引用数组公式太慢,不考虑UsedRange?,arrays,excel,excel-formula,array-formulas,Arrays,Excel,Excel Formula,Array Formulas,我有一个包含许多数组公式的工作表,它引用了另一个包含两行的小型源数据表。公式如下: {=INDEX(Source!$F:$F,MATCH(1, (Source!$A:$A=$B6)*(Source!$B:$B=H$1),0))} 计算速度很慢。当我用1000个单元格的范围替换整个列引用时,工作簿的计算速度显著加快 {=INDEX(Source!$F$1:$F$1000,MATCH(1, (Source!$A$1:$A$1000=$B6)*(Source!$B$1:$B$1000=H$1),0)

我有一个包含许多数组公式的工作表,它引用了另一个包含两行的小型源数据表。公式如下:

{=INDEX(Source!$F:$F,MATCH(1, (Source!$A:$A=$B6)*(Source!$B:$B=H$1),0))}
计算速度很慢。当我用1000个单元格的范围替换整个列引用时,工作簿的计算速度显著加快

{=INDEX(Source!$F$1:$F$1000,MATCH(1, (Source!$A$1:$A$1000=$B6)*(Source!$B$1:$B$1000=H$1),0))}
我已经在源代码表上更改了UsedRange,它还可以,并且只有几行(使用ctrl+end)。 使用整列引用是非常正常的做法,但在这里它并不能很好地工作,因为它不尊重UsedRange

找到有关此主题的文章:

也就是说:

但避免使用整列引用的数组公式和SUMPRODUCT


但是为什么呢?我无法理解为什么Excel不能将数组公式的计算算法限制在使用范围内?还有其他解决方法吗?

不确定是否通过VBA构建,但如果只是使用公式,可以尝试以下方法:

=INDEX(Source!$F$1:$F$1000,MATCH(1,INDEX((Source!$A$1:INDEX(Source!$A:$A,COUNTA(Source!$A:$A))=$B6)*(Source!$B$1:INDEX(Source!$B:$B,COUNTA(Source!$B:$B))=H$1),),0))
看起来很长,但它基本上是一种将列引用限制到最后使用的行的动态方式。顺便说一句,@Chris在评论中提出的另一个很好的建议是使用一个实际的表格,这应该会加快速度


顺便说一句,由于第二个
索引

并非所有函数都检查使用的范围,因此您不必通过CtrlShiftEnter nomore输入该值。也许您应该将源代码的格式设置为tabel(CTRL-T)或命名范围。@Chris它的格式为表,但我只需要使用间接引用,因为表格是用C#程序动态创建的。您使用哪个Excel版本?如果您在运行时构建公式,则可以使用
UsedRange.Rows.Count
动态构建公式。如果使用365,则可以使用XLOOKUP(XLOOKUP())。我认为这将比索引(MATCH())数组函数更快。。。