【发布时间】:2015-05-12 15:19:58
【问题描述】:
我有 40 个 Excel 工作簿,每个工作簿有 25 个工作表,其中包含 A:Q 列中的数据和可变行数(将少于 5000 行)。
40 个工作簿中的每一个都代表 1 个团队。 25 个工作表中的每一个都是 1 个月的数据,这些工作表被命名为“Jan-15”、“Feb-15”等......到“Dec-16”,所以显然到目前为止只有 5 个工作表中有数据(因为现在是 5 月 15 日)。每个工作簿都为将来的数据设置。
我需要将所有数据集中到一个位置,我认为最好使用数据透视表。到目前为止,我已经设置了一个包含 VBA 代码的附加工作簿,以将所需的数据提取到一个数据透视表中。它通过在工作表上为每个团队设置复选框并为每个月设置更多复选框来实现此目的。如果复选框被选中 (= TRUE),则该团队和月份的数据将被提取。
例如如果选择了“Team 1”和“Jan-15”,数据透视表将显示 Team 1 的 1 月份数据。如果选择了“Team 5”和“Mar-15”,则将提取 Team 1 和 Team 5 的 1 月和 3 月数据。
在 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....
有时我只需要查看团队 3 的 1 月 15 日和 2 月 15 日的数据,有时我需要团队 1 到 10 的 3 月 15 日的数据,有时我需要查看所有 40 个团队的数据过去 12 个月的数据。
但是,我现在正在苦苦挣扎,因为这只适用于一定数量的选择。我一次最多只需要选择 12 个月,因此我限制了可以选择的“月”复选框的数量,但我无法选择所有 40 个团队和所有 12 个月,因为我收到一条错误消息那说
运行时错误“1004”:[Microsoft][ODBC Excel 驱动程序] 查询太复杂。
如果我只选择 10 个团队和 5 个月,或 40 个团队和 1 个月,查询运行良好,但我需要更多。
是我的SQL代码错了,还是有更好的写法?
或者还有其他方法可以合并所有这些数据吗? (我只有 Excel,没有 Access!)
【问题讨论】:
-
使用此方法可以在 SQL 查询中执行的联合数是有限制的。您是否有理由不能使用 VBA 来简单地复制值?
-
您可以只从每个文件中提取数据,一次一个,然后将其粘贴到“主”电子表格中(对于使用复选框请求的所有文件)。然后每次粘贴之前,检查工作表中最后一行的数据。这样,查询不会变得太复杂,您将在主表中获得所有必需的数据。 (这个想法和马斯卡罗先生是一样的,但是我没有刷新页面看到他的建议)。