ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: lg747699

[求助] 对比差异差异(数据量超过1百万行)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-2 09:03 | 显示全部楼层
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-2 09:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
shiruiqiang 发表于 2024-7-2 08:54
根据表,汇总成2个数组。
再把1个数组遍历成字典,值为数组名。对另一数组判断exists,2者是否同时存在

再把1个数组遍历成字典,值为数组名。对另一数组判断exists,2者是否同时存在

把不存在的差异提取出来。

TA的精华主题

TA的得分主题

发表于 2024-7-2 09:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Option Explicit
Sub a()
    Dim cat, strconn As String, tb1, tb2
    Dim myf As String
    Application.ScreenUpdating = False
    myf = ThisWorkbook.Path & "\a.mdb"
    If Dir(myf) <> "" Then Kill myf
    Set cat = CreateObject("adox.catalog")
    strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myf
    cat.Create strconn
    Set tb1 = CreateObject("ADOX.Table")
    Set tb2 = CreateObject("ADOX.Table")
    With tb1
        .ParentCatalog = cat
        .Name = "T1"
        .Columns.Append "ID", 3
        .Columns("ID").Properties("AutoIncrement") = True
        .Columns.Append "编号", 202, 50
        .Keys.Append "PrimaryKey", 1, "ID"
        cat.Tables.Append tb1
    End With
    With tb2
        .ParentCatalog = cat
        .Name = "T2"
        .Columns.Append "ID", 3
        .Columns("ID").Properties("AutoIncrement") = True
        .Columns.Append "编号", 202, 50
        .Keys.Append "PrimaryKey", 1, "ID"
        cat.Tables.Append tb2
    End With
    Set cat.ActiveConnection = Nothing
    Dim myfile As String, wb As Workbook, i&, J&, m&, arr, cnn, sql$
    myf = ThisWorkbook.Path & "\"
    myfile = Dir(myf & "*订单*.xls*")
    Set cnn = CreateObject("ADODB.CONNECTION")
    cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;" & "Data Source=" & ThisWorkbook.Path & "\a.mdb"
    Do While myfile <> ""
        If myfile <> ThisWorkbook.Name Then
            Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & myfile)
            If wb.Sheets.Count > 1 Then
                For i = 1 To wb.Sheets.Count
                    arr = wb.Sheets(i).[A1].CurrentRegion
                    For J = 1 To 5 Step 4
                        For m = 1 To UBound(arr)
                            sql = "INSERT INTO T2(编号) VALUES('" & arr(m, J) & "')"
                            cnn.Execute sql
                        Next
                    Next
                Next
            Else
                arr = wb.Sheets(1).[A1].CurrentRegion
                For m = 2 To UBound(arr)
                    sql = "INSERT INTO T1(编号) VALUES('" & arr(m, 1) & "')"
                    cnn.Execute sql
                Next
            End If
            wb.Close 0
        End If
        myfile = Dir
    Loop
    With Sheet2
        .Cells.Clear
        .[A1] = "ERP有但SRM找不到"
        .[D1] = "SRM有但ERP查不到"
        sql = "select 编号 FROM T1 WHERE 编号 NOT IN (SELECT 编号 from T2)"
        .Range("B2").CopyFromRecordset cnn.Execute(sql)
        sql = "select 编号 FROM T2 WHERE 编号 NOT IN (SELECT 编号 from T1)"
        .Range("E2").CopyFromRecordset cnn.Execute(sql)
    End With
    Set cnn = Nothing
     Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-2 09:30 | 显示全部楼层
魂断蓝桥 发表于 2024-7-2 09:07
Option Explicit
Sub a()
    Dim cat, strconn As String, tb1, tb2

老师,为什么显示我“部件没有注册”

TA的精华主题

TA的得分主题

发表于 2024-7-2 09:46 | 显示全部楼层
关键字:schema(20)
GIF 2024-07-02 09-45-46.gif

limonet.zip

40.99 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2024-7-2 09:47 | 显示全部楼层
Sub limonet()
    Dim Cn As Object, SQLERP$, SQLSRM$, Sht
    Set Cn = CreateObject("Adodb.Connection")
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;hdr=no';Data Source=" & ThisWorkbook.Path & "\srm订单.xls"
    SQLERP = "Select F1 as ERP From [Excel 12.0;hdr=no;Database=" & ThisWorkbook.Path & "\erp订单1.xlsx" & "].[sheet1$A2:A] Union All " _
            & "Select F1 as ERP From [Excel 12.0;hdr=no;Database=" & ThisWorkbook.Path & "\erp订单2.xlsx" & "].[sheet1$A2:A]"
    For Each Sht In Cn.openschema(20).GetRows(, , "TABLE_NAME")
        SQLSRM = SQLSRM & " Union All Select F1 as SRM From [" & Replace(Sht, "'", "") & "] Union All Select F5 From [" & Replace(Sht, "'", "") & "]"
    Next Sht
    StrSQL = "Select b.* From (" & SQLERP & ")a Right Join (" & Mid(SQLSRM, 12) & ")b On a.ERP=b.SRM Where a.erp is NUll" 'OK
    Range("B2").CopyFromRecordset Cn.Execute(StrSQL)
    StrSQL = "Select a.* From (" & SQLERP & ")a Left Join (" & Mid(SQLSRM, 12) & ")b On a.ERP=b.SRM Where b.srm is NUll" 'OK
    Range("A2").CopyFromRecordset Cn.Execute(StrSQL)
End Sub

TA的精华主题

TA的得分主题

发表于 2024-7-2 09:50 | 显示全部楼层
lg747699 发表于 2024-7-2 09:30
老师,为什么显示我“部件没有注册”

没有ado控件,需要安装access,如果数据量不大,就不需要access

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-2 10:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
limonet 发表于 2024-7-2 09:47
Sub limonet()
    Dim Cn As Object, SQLERP$, SQLSRM$, Sht
    Set Cn = CreateObject("Adodb.Connect ...

刚刚试了,数据太大,失败了

TA的精华主题

TA的得分主题

发表于 2024-7-2 10:30 | 显示全部楼层
lg747699 发表于 2024-7-2 10:23
刚刚试了,数据太大,失败了

超过100万的话,用sqlite更好一些,你得excel是32位还是64位,如果32位可用vbRichClient5

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-2 10:30 | 显示全部楼层
limonet 发表于 2024-7-2 09:47
Sub limonet()
    Dim Cn As Object, SQLERP$, SQLSRM$, Sht
    Set Cn = CreateObject("Adodb.Connect ...

image.png
9F470C79-CCFF-4eac-B418-1095B48BF10C.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 23:57 , Processed in 0.034498 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表