如何将40个工作簿中的Excel数据与25个工作表结合在一起?

我有40个Excel工作簿,每个工作表都有25个工作表,其中包含列A:Q和可变行数(将less于5000行)中的数据。

40个工作簿中的每一个代表1个团队。 25个工作表中的每一个都是1个月的数据,这些表格被命名为“1月15日”,“2月15日”等…到“12月16日”,因此显然目前只有5张表格中有数据现在是5月15日)。 每个工作簿都是为将来的数据设置的。

我需要把所有的数据放到一个地方,我认为最好使用数据透视表。 到目前为止,我已经build立了一个包含VBA代码的附加工作簿,将所需的数据放入一个数据透视表中。 这是通过在每个团队的工作表上设置checkbox以及每个月checkbox来实现的。 如果checkbox被选中(= TRUE),那么该团队和月份的数据将被拉动。

例如,如果select“团队1”和“1月15日”,数据透视表将显示团队1的1月份数据。 如果select了“Team 5”和“Mar-15”,那么Team 1和Team 5的1月和3月的数据将被抽中。

通过编译所需数据的一个SQLstring(我的SQL知识限于2天的研究!),在VBA中是这样做的,例如:

SELECT * FROM `Team 13.xlsx`.[JAN-15$] UNION ALL SELECT * FROM `Team 13.xlsx`.[FEB-15$] UNION ALL SELECT * FROM `Team 13.xlsx`.[MAR-15$] UNION ALL SELECT * FROM `Team 15.xlsx`.[JAN-15$] UNION ALL SELECT * FROM `Team 15.xlsx`.[FEB-15$] UNION ALL SELECT * FROM `Team 15.xlsx`.[MAR-15$]" etc.... 

有时候我只需要看看,3月1日和2月15日的球队3的数据,有时我需要3月15日的球队1到10的数据,有时我需要看到所有40球队的数据最近12个月。

但是,现在我正在挣扎,因为这只适用于一定数量的select。 我只需要一次select12个月,所以我限制了可以select的“月”checkbox的数量,但是我不能select全部40个团队,并且所有12个月都收到错误消息说的是

运行时错误“1004”:[Microsoft] [ODBC Excel驱动程序]查询太复杂。

如果我只select10个团队和5个月,或40个团队和1个月,查询运行良好,但我需要更多。

我的SQL代码是错误的,还是有更好的方法来写它?

或者还有另一种方法可以将所有这些数据结合起来? (我只有Excel,而不是访问,在我的处置!)

你的查询是好的,就像错误说的那样,只是为穷人的Jet *引擎处理而创build了一个太复杂的查询。 我build议你把它分解成一个简单的循环,你把每个团队/月份的checkbox组合为一个单独的查询,每一个将数据拉到你的主表中并附加到你的数据集的末尾,数据透视表是build成的。

通过一些testing,你可以确定你可以把一个团队拖拽一年而不会压倒数据库引擎,并且编写你的代码以这种方式工作(例如,最多12 Union ),但这会使你的代码更复杂。 您可能会发现,由于不必进行如此多的SQL查询,执行速度会更快一些,但是由于它们更复杂,执行速度可能会更慢。

*是的,我知道它不再被称为“Jet”,但是我select让Wiki链接处理细节,尽pipe微软希望我们做什么,但是大多数人可能仍然会这样称呼它。

感谢回答这个问题的人们。 您的帮助和经验非常感谢:-)

我已经设法使用所发布的评论来解决这个问题。 使用VBA在工作簿和工作表中循环使用checkbox将每张工作表中的数据复制到另一个(报表)工作簿中的主工作表中,然后使用VBA从主数据创build数据透视表。

感谢FreeMan发布了一个答案,然而不幸的是,我的SQL和查询技能是非常有限的,我不明白或知道如何实现你的build议! 所以我认为我的VBA解决scheme对我来说是最容易的,而且工作起来。

我认为最初我试图使用Query / SQL过分复杂化了这个问题,但是我发现这是基于我事先对networking进行拖网的研究的方法。 我以为复制所有的数据可能太费时间和困难,但事实certificate,事实并非如此。

我可以发布我用来检查checkbox的代码,打开文件,select工作表,复制数据并创build数据透视表,如果有人需要这样做。

希望这可以帮助未来的人!

NGH