我对 SQL 非常熟悉,可以执行基本查询并处理数据库中拆分成多个表的数据。我对 Excel 2007 更了解一些,经常使用它来管理我的机械工程项目。
有时我想在 Excel 中处理来自多个电子表格的数据并将其合并到一个表中 - 这项任务非常适合使用 SQL 查询。通常,当我遇到此类问题时,我的第一反应是开始在脑海中构建查询。不幸的是,很多时候 SQL 查询无法轻松转换为 Excel 函数,这让我无法继续前进。
是否可以利用 Excel 中的 SQL 实现这些功能?
答案1
您可以将 ADO 与 Excel VBA 结合使用。例如:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
''This is just a convenient name to test, it would probably be
''better to use the full file name eg C:\Docs\XL.xls
strFile = Workbooks(1).FullName
''For ACE see: http://www.connectionstrings.com/excel-2007
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
''Pick one:
strSQL = "SELECT * FROM DataTable" ''Named range
strSQL = "SELECT * FROM [Sheet1$A1:E346]" ''Range
strSQL = "SELECT * FROM [Sheet1$]" ''All the data in a sheet
strSQL = "SELECT * FROM [Excel 8.0;HDR=YES;IMEX=1;" _
& "database=C:\Docs\LTD.xls].[Sheet1$]" ''Refer to second workbook
rs.Open strSQL, cn
''Write a recordset to a sheet
Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs
查询可以使用 Jet SQL 中可接受的任何内容:
Fundamental Microsoft Jet SQL for Access 2000
Intermediate Microsoft Jet SQL for Access 2000
Advanced Microsoft Jet SQL for Access 2000
您将发现更多内容:https://stackoverflow.com/,包括添加到 MS Access、SQL Server、MySQL 等等。
答案2
你的情况和我几个月前的情况一模一样。每次我需要在 Excel 中处理数据时,我也会在脑海中构建 SQL 查询。因此,我创建了一个名为XLTools SQL 查询。现在我已将其发布在我们的网站上,以便其他人像你和我一样可以查看!
它允许使用嵌入式 SQL 编辑器针对 Excel 工作簿中的表构建任何 SQL 查询并立即运行它,并可以选择将结果放在新的或任何现有的工作表上。
如果您只需要创建和运行 SQL 查询,它会更容易使用 - 无需 VBA,无需使用 MS Query 进行复杂的操作...
以下是一个例子: