加速Excel公式中65000个查询的索引/匹配

加速Excel公式中65000个查询的索引/匹配,excel,vba,performance,Excel,Vba,Performance,我正在尝试对65000个单元格运行索引/匹配查询,作为Excel中商店库存计算的一部分。我们的数据库中有65000个独特的项目 无论如何,这是我粘贴65000行的一列公式。显然,它运行得非常慢。我可以做些什么来加快速度 =INDEX(SAQTY!H:H, MATCH(A2&"GRA", SAQTY!C:C&SAQTY!F:F, 0)) 另一方面,索引/匹配是跨多个工作表的交叉检查,这与性能有关吗?使引用动态如下: =INDEX(SAQTY!H:H, MATCH(A2&"

我正在尝试对65000个单元格运行索引/匹配查询,作为Excel中商店库存计算的一部分。我们的数据库中有65000个独特的项目

无论如何,这是我粘贴65000行的一列公式。显然,它运行得非常慢。我可以做些什么来加快速度

=INDEX(SAQTY!H:H, MATCH(A2&"GRA", SAQTY!C:C&SAQTY!F:F, 0))

另一方面,索引/匹配是跨多个工作表的交叉检查,这与性能有关吗?

使引用动态如下:

=INDEX(SAQTY!H:H, MATCH(A2&"GRA", SAQTY!C1:INDEX(SAQTY!C:C,MATCH(1E+99,SAQTY!H:H))&SAQTY!F1:INDEX(SAQTY!F:F,MATCH(1E+99,SAQTY!H:H)), 0))

使引用动态化,如下所示:

=INDEX(SAQTY!H:H, MATCH(A2&"GRA", SAQTY!C1:INDEX(SAQTY!C:C,MATCH(1E+99,SAQTY!H:H))&SAQTY!F1:INDEX(SAQTY!F:F,MATCH(1E+99,SAQTY!H:H)), 0))


是否需要使用整列引用?需要将引用限制为仅包含数据的单元格。将所有完整列引用更改为有限引用。目前,每一个公式都在进行200多万次计算。200万*65000=13000000000计算。否,但范围需要包括SAQTY表中的所有可用值。在VBA中,我知道如何指定“带数据的最后一个单元格”,但我不知道如何在excel单元格公式中指定它是否需要动态?也许100000行就可以了?那肯定是问题所在。由于源数据的列计数每天都在更改,我如何更改公式以查找最后一个包含数据的单元格?是否需要使用完整的列引用?需要将引用仅限于包含数据的单元格。将所有完整列引用更改为有限引用。目前,每一个公式都在进行200多万次计算。200万*65000=13000000000计算。否,但范围需要包括SAQTY表中的所有可用值。在VBA中,我知道如何指定“带数据的最后一个单元格”,但我不知道如何在excel单元格公式中指定它是否需要动态?也许100000行就可以了?那肯定是问题所在。由于源数据的列计数每天都在变化,我如何更改公式以查找最后一个单元格wtih数据?我只是编写了一些类似的内容,但依赖于动态命名范围(使用类似公式定义)。但是,没有必要动态定义
SAQTY!H:H
。它可以作为一个完整的列引用保留,不会产生任何不良影响。@Jeeped,你是说完整的列引用实际上是动态的吗?@AlexRitter-动态范围仅对中的串联范围是必需的;不在
SAQTY!H:H
。使用
(SAQTY!H:H
@Jeeped哦,好的,我遵循@Jeeped,除非匹配范围从不同于1的行开始。但是,是的,我也发现了这一点。我只是写了一些类似的东西,但依赖于动态命名范围(用类似的公式定义)。但是,没有必要动态定义
SAQTY!H:H
。它可以作为一个完整的列引用保留,不会产生任何不良影响。@Jeeped您是说完整的列引用实际上是动态的吗?@AlexRitter-动态范围仅对中的串联范围是必需的;而不是
SAQTY!H:H
。没有速度差异ce使用
(SAQTY!H:H
@Jeeped哦,好的,我跟着@Jeeped,除非匹配范围从1以外的行开始。但是,是的,我也发现这是真的。