我想使用SQL在同一工作簿中的工作表之间移动数据。
我的床单很大(宽度和深度),并且处理VBA的速度很慢。
情节是我有第1到第5页 我想用1到-5页的一列或两列创建表(6) 索引键是SKU,对所有工作表都是通用的。 所有工作表都按SKU排序开始。
当我在Sheet(1)中抓取一列时,我可以将它放在Sheet(6),A列中。 当我在工作表(2)中抓取一列时,我需要确保每行的SKU匹配,并确保工作表(2)中的数据正确放置在该SKU的下一列中。如果该SKU的数据不可用,则相应的单元格将保留为EMPTY。每列的数据保存在目标工作表的一个选定列中。
我不确定如何设置连接或记录集选择,因为我们在同一个工作簿中工作。我无法在任何地方找到这个话题。确保SKU从所有表格中收到正确的数据对我来说似乎有点令人生畏。
我似乎记得一些关于无法建立ADO连接以打开工作簿/工作表的事情。如果是这种情况,我将创建一个单独的工作簿来提取数据并在那里进行操作。
我真的很感激有关这个问题的任何指导。这对我来说都是新的基础。
谢谢,CraigM
答案 0 :(得分:0)
以下是我创建的解决方案:
我得到了sheet1,sheet2,如下图所示:
要使用sql复制,请使用以下代码:
注意:您需要转到工具>参考>检查Microsoft ActiveX数据对象2.8库和Microsoft Forms 2.0对象库
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
以下是表3的结果
答案 1 :(得分:0)
精彩的解决方案,keong kenshih!
我正在查看Microsoft的文档,当我读到它时,它表明您无法在打开的工作簿上使用SQL。
感谢您提供概念验证代码。我将在接下来的几天内将它纳入我的项目中。应该提供很大的性能提升。
我将从使用.jet提供程序更改为.ace提供程序,以便与更新版本的Excel兼容。
Nick.McDermaid:我无法将所有数据移动到数据库中,因为数据经常在Excel中更新。我很幸运客户甚至有Excel他们是如此倒退。他们没有数据库的概念。它们与雅虎一起陷入了1970年代。
再次感谢大家的评论!