使用SQL组合Excel中不同位置的文件

使用SQL组合Excel中不同位置的文件,sql,excel,vba,Sql,Excel,Vba,我正在尝试将来自不同文件位置的不同文件合并到一个电子表格中。我在网上找到了一些代码,通过这些代码,如果它们来自同一个位置,我可以在VBA中使用SQL来组合它们: 代码摘录如下: 子样本() 设置objConnection=CreateObject(“ADODB.Connection”) Set objRecordSet=CreateObject(“ADODB.Recordset”) objConnection.Open“Provider=Microsoft.Jet.OLEDB.4.0;”_ “数

我正在尝试将来自不同文件位置的不同文件合并到一个电子表格中。我在网上找到了一些代码,通过这些代码,如果它们来自同一个位置,我可以在VBA中使用SQL来组合它们:

代码摘录如下:

子样本()
设置objConnection=CreateObject(“ADODB.Connection”)
Set objRecordSet=CreateObject(“ADODB.Recordset”)
objConnection.Open“Provider=Microsoft.Jet.OLEDB.4.0;”_
“数据源=”&ThisWorkbook.path&“;”&_
“扩展属性=”“text;HDR=YES;FMT=Delimited”“”
StrSQL=“从samplesheet.csv中选择*
打开StrSQL
...
端接头
在上面的代码中,我只能指定一个位置作为数据源。有没有其他方法来编写SQL代码,以便它可以处理多个位置


谢谢

假设所有CSV文件共享相同的ID字段,请考虑多个
左连接
查询注意:SQL查询需要对来自表和加入表的每个
进行括号匹配

StrSQL=“选择*_
&“来自((samplesheet.csv t1)”_
&“LEFT JOIN[text;database=“&this工作簿.Path&]”。samplesheet2.csv作为t2”_
&“在t1.ID=t2.ID上”_
&“LEFT JOIN[text;database=“&ThisWorkbook.Path&]”。samplesheet3.csv作为t3”_
&“在t1.ID=t3.ID上”
请注意,任何JET/ACE引擎查询都有一个有限的
JOIN
语句限制,这取决于数据

对于大量CSV文件,考虑通过目录进行迭代。下面按列将每个记录集复制到相邻位置注意:由于迭代过程,此处不使用ID联接。数据只是并排放置

Dim objConnection作为对象,objRecordSet作为对象
将最后一列变长
Dim csvFile作为字符串,StrSQL作为字符串
设置objConnection=CreateObject(“ADODB.Connection”)
objConnection.Open“Provider=Microsoft.Jet.OLEDB.4.0;”_
“数据源=”&ThisWorkbook.Path&“;”&_
“扩展属性=”“text;HDR=YES;FMT=Delimited”“”
csvFile=Dir(thisvoolk.Path&“\*csv”)
当Len(csvFile)>0时执行
StrSQL=“从[”&csvFile&“]中选择*按ID排序;”
'初始化记录集
Set objRecordSet=CreateObject(“ADODB.Recordset”)
打开StrSQL,objConnection
'保存到工作表
使用此工作簿。工作表(“表1”)
lastColumn=.Cells(1,.Columns.Count).End(xlToLeft).Column+1
.Range(.Cells(1,lastColumn),.Cells(1,lastColumn)).CopyFromRecordset objRecordSet
以
'取消初始化记录集
objRecordSet.Close
Set objRecordSet=Nothing
csvFile=Dir
环
对象连接。关闭
Set objConnection=Nothing

谢谢,我会试试看!这使我能够水平连接多个csv文件。对不起,我的问题不是很清楚。我需要使用左连接来组合文件。然后将
UNION
更改为
LEFT JOIN
调用,并为迭代更改列位置的行。但对于许多文件,我建议将所有CSV导入数据库(如MS Access),然后根据需要连接以转储到MS Excel。您发布的第一个代码对我来说并不适用。它在FROM子句后表示语法错误。如前所述,多个连接需要使用此SQL方言中的括号。所有表都与第一个表t1相关(不是t2和t3,而是每个表都与t1相关)。Post实际csv数据文件样本,包括ID和文件名/字段,作为标识符,带有空格和特殊字符,需要用括号括起来,有多少个文件,实际使用的SQL等。我在这里暗中工作,并给出了一般性答案。