Excel 统计已关闭工作簿中多个值的总提及次数

Excel 统计已关闭工作簿中多个值的总提及次数,excel,vba,function,excel-formula,Excel,Vba,Function,Excel Formula,我使用这个公式从另一个工作簿中提取数据。这会重复数百次,以计算特定域(有数百个域)在另一张表中使用的次数 =SUMPRODUCT(COUNTIF(INDIRECT({"'E:\[OtherSheet.xlsx]Sheet1'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet2'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet3'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet4'!A1:ZZ500";"'E:\[O

我使用这个公式从另一个工作簿中提取数据。这会重复数百次,以计算特定域(有数百个域)在另一张表中使用的次数

=SUMPRODUCT(COUNTIF(INDIRECT({"'E:\[OtherSheet.xlsx]Sheet1'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet2'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet3'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet4'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet5'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet6'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet7'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet8'!A1:ZZ500";"'E:\[OtherSheet.xlsx]Sheet9'!A1:ZZ500"}),D2))
这计算“D2”在其他工作簿中出现的次数(跨越九个不同的工作表)。此代码被复制了数百次,用于“D3”、“D4”等

有许多问题

1) 另一个工作簿必须打开,否则数据将不会更新(即使使用确切的路径,间接也不允许更新)

2) 如果两个工作表都打开,则每次执行任何操作时都会进行更新,即使是复制和粘贴单元格,或插入新单元格。“手动”公式更新无法使用,因为除此之外,还有其他动态变量(不会降低Excel的速度)需要经常重新计算

3) 据我所知,间接函数和其他相关函数都是单线程的,即使使用i7-8700k处理器和32gb RAM,再加上64位Excel,重新计算的速度也会非常慢

4) 我试着大幅降低“扫描区域”,但没有加快速度。ZZ10000和ZZ500没有区别,它们都一样慢

一个解决方法是保持一张工作表处于打开状态,更新它,然后在需要“总体”视图时同时打开这两张工作表。如果关闭一张工作表,Excel工作正常,因为它不必不断地重新计算。最好我能让两张纸都打开,而不让它慢下来

通过几十个小时的研究,我得出了这样一个结论:不使用VBA是不可能快速完成的。但是我找不到任何VBA函数来复制上面的代码


我也对非基于VBA的解决方案持开放态度。

您可以使用python的pandas模块来解决这个问题。使用pandas的dataframe更容易,即使工作簿已关闭,也可以轻松访问工作簿。只有我的两分钱。

你有什么Excel版本?看看@Ricardo Diaz我使用的是64位Excel 2013。我会调查的,谢谢你的建议。是的,看看。对我来说,这就是路。发布您可能有的任何问题。关于(DAO/ADO)呢?数据应存储在数据库中(例如Sql Server)!您可以使用数据源在excel中获取数据。@计算机从“其他”工作簿获取的数据需要易于访问和编辑。我不断更新这两张表。我真的不确定SQL是否适合这个函数。谢谢你的建议,很遗憾,我从来没有用Python编写过代码,我只知道一个相当不错的PHP和一点JS。