使用 SQL 将数据从工作表复制到同一工作簿中的其他工作表?

Using SQL to copy data from worksheets to other worksheets in the same workbook?

我想使用 SQL 在同一个工作簿中将数据从 sheet 移动到 sheet。

我的 sheet 很大(宽度和深度)并且处理 VBA 很慢。

场景是我有 sheets 1 到 5。
我想用 sheets 1 -5.
中的一两列创建 sheet(6) 索引键是 SKU,所有 sheets 通用。 所有 sheet 都按 SKU 开始排序。

当我在 Sheet(1) 中抓取一列时,我可以将它放在 Sheet(6) 的 A 列中。 当我抓取 sheet(2) 中的一列时,我需要确保每一行的 SKU 匹配并且来自 sheet(2) 的数据正确放置在该 SKU 的下一列中。如果该 SKU 的数据不可用,则相应的单元格留空。每一列的数据都保存在目标工作的一个选定列中sheet。

我不确定如何设置连接或记录集选择,因为我们在同一个工作簿中工作。我找不到在任何地方讨论的这个话题。确保 SKU 从所有 sheet 接收正确的数据对我来说似乎有点令人生畏。

我好像想起了无法建立ADO连接打开workbooks/sheets的事情。如果是这种情况,我将创建一个单独的工作簿来提取数据并在那里进行操作。

我非常感谢有关此主题的任何指导。这对我来说是全新的领域。

谢谢,CraigM

下面是我创建的解决方案:
我得到 sheet1,sheet2,如下图所示:

要使用 sql 复制,使用以下代码:
注意:您需要转到工具 > 参考 > 检查 Microsoft ActiveX Data Objects 2.8 Library 和 Microsoft Forms 2.0 Object Library

Sub SQLCopy()


Dim MyConnection As ADODB.Connection
Dim MyRecord As ADODB.Recordset

Set MyConnection = New ADODB.Connection
Set MyRecord = New ADODB.Recordset

' This is the Excel 97-2003 connection string. It should also work with
' Excel 2007 onwards worksheets as long as they have less than 65536
' rows
With MyConnection
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _
        "Extended Properties=Excel 8.0;"
    .Open
End With

MyRecord.Open "SELECT [Sheet1$].[SKU],[SecondDATA] FROM [Sheet1$],[Sheet2$] WHERE " & _
    "[Sheet1$].[SKU]  = " & _
    "[Sheet2$].[SKU]", MyConnection

Sheets("Sheet3").Cells(2, 1).CopyFromRecordset MyRecord

MyRecord.Close
MyConnection.Close

End Sub


以下是sheet3
处的结果

很棒的解决方案,keong kenshih!

我正在查看 Microsoft 文档,当我阅读它时,它表明您不能在打开的工作簿上使用 SQL。

感谢您提供概念验证代码。我将在接下来的几天内将其合并到我的项目中。应该会带来很大的性能提升。

我将从使用 .jet 提供程序更改为使用 .ace 提供程序以与更新版本的 Excel 兼容。

Nick.McDermaid: 由于Excel中的数据经常更新,我无法将所有数据移动到数据库中。我很幸运客户甚至 Excel 他们是如此落后。他们没有数据库的概念。他们停留在 1970 年代的雅虎。

再次感谢大家的评论!