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

Sql 如何将40个工作簿中的Excel数据与每个工作簿中的25个工作表结合起来?,sql,vba,excel,odbc,Sql,Vba,Excel,Odbc,我有40个Excel工作簿,每个工作簿有25个工作表,其中包含A:Q列中的数据和可变行数(少于5000行) 40本工作簿中的每本代表一个团队。25份工作表中的每一份都是1个月的数据,这些工作表的名称分别为“1月15日”、“2月15日”等。。。到2016年12月,显然到目前为止只有5张表格有数据(现在是5月15日)。每个工作簿都是为将来的数据而设置的 我需要将所有数据放在一个地方,我认为最好使用透视表。到目前为止,我已经设置了一个包含VBA代码的附加工作簿,用于将所需数据拉入一个透视表中。它通过在

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

40本工作簿中的每本代表一个团队。25份工作表中的每一份都是1个月的数据,这些工作表的名称分别为“1月15日”、“2月15日”等。。。到2016年12月,显然到目前为止只有5张表格有数据(现在是5月15日)。每个工作簿都是为将来的数据而设置的

我需要将所有数据放在一个地方,我认为最好使用透视表。到目前为止,我已经设置了一个包含VBA代码的附加工作簿,用于将所需数据拉入一个透视表中。它通过在每个团队的工作表上设置复选框以及每个月设置更多复选框来实现这一点。如果选中该复选框(=TRUE),则该团队和月份的数据将被提取出来

例如,如果选择了“团队1”和“1月15日”,透视表将显示团队1月的数据。如果选择了“第5组”和“2015年3月”,则第1组和第5组的1月和3月数据将通过

Is在VBA中通过编译所需数据的SQL字符串来实现这一点(我的SQL知识仅限于2天的研究!),例如:

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....
有时我只需要查看,比如说第三队15年1月和2月的数据,有时我需要第1至10队15年3月的数据,有时我需要查看过去12个月内所有40支球队的数据

然而,我现在很挣扎,因为这只适用于一定数量的选择。我一次最多只需要选择12个月,因此我限制了可选择的“月”复选框的数量,但我无法选择所有40个团队和所有12个月,因为我收到一条错误消息

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

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

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


或者有没有其他方法可以合并所有这些数据?(我只有Excel,没有Access供我使用!)

你的查询很好,正如错误所说,你只是创建了一个太复杂的查询,穷人无法处理。我建议您将其分解为一个简单的循环,将每个团队/月份复选框组合作为一个单独的查询进行处理,每个组合将数据拉入主控表,然后将其附加到构建透视表的数据集的末尾

通过一些测试,您可以确定您可以在不影响数据库引擎的情况下让一个团队工作一年,并以这种方式编写代码(例如,最多12个
Union
),但这将使您的代码更加复杂。您可能会发现,不必进行这么多SQL查询,它的执行速度会快一点,但由于它们更复杂,执行速度可能会慢一些


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

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

今天,我通过发表的评论,设法解决了这个问题;使用VBA循环浏览工作簿和工作表,使用复选框将每个工作表中的数据复制到另一个(报表)工作簿中的主工作表中,然后使用VBA从主数据创建透视表

感谢您FreeMan的回复,但不幸的是,我的SQL和查询技能非常有限,我不理解或不知道如何实施您的建议!因此,我认为我的VBA解决方案对我来说是最容易做到的,而且很有效

我认为最初我试图使用Query/SQL使问题过于复杂,但根据我之前在网上做的研究,我发现这是一种可行的方法。我认为跨多个服务器复制所有数据可能太耗时和困难,但事实并非如此

我可以发布用于选中复选框、打开文件、选择工作表、复制数据以及创建透视表(如果有人需要)的代码

希望这能在将来帮助别人


NGH

使用此方法在SQL查询中可以执行的联合数是有限制的。为什么不能使用VBA简单地复制这些值?您可以从每个文件中提取数据,一次一个,然后粘贴到“主”电子表格中(对于复选框请求的所有文件)。然后,每次粘贴之前,检查工作表中最后一行的数据。这样,查询就不会变得太复杂,您将在主控表中获得所有必需的数据。(这与马斯卡罗先生的想法相同,但我没有刷新页面并看到他的建议)。对不起,我的代表没有足够高的票数支持你的答案弗里曼:-)