VBA与数据库——合并表格并删除重复

2021-09-10 14:23:24 浏览数 (2)

在前面合并表格里提到,用union all关键字进行合并数据,union all只是简单的将所有的数据进行复制到一起,不做其他的处理。

如果想合并数据的时候,重复的数据仅保留一条的话,可以使用union关键字,union在合并数据的时候,会将重复的数据删除掉,仅保留一条。

union关键字判断数据是否重复是根据select获取的所有字段进行判断的,也就是必须每一个字段都是一样的情况下才算重复。

只要把前面合并表格里的union all替换为union,就可以把功能改变为合并数据,并且删除重复。

如果仅仅针对一张表想用union删除重复,也是可以的:

代码语言:javascript复制
Sub ADOUnion()
    Dim AdoConn As Object
    Set AdoConn = VBA.CreateObject("ADODB.Connection")
    
    '打开数据库
    AdoConn.Open "Provider =Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.fullname & ";Extended Properties=""Excel 12.0;HDR=YES"";"
    
    Dim rst As Object
    Set rst = VBA.CreateObject("ADODB.Recordset")
    Set rst = AdoConn.Execute("select * from [Sheet1$A1:B11] union select * from [Sheet1$A1:B11]", , 1)
    '输出标题
    Dim i As Long
    For i = 0 To rst.Fields.Count - 1
        Range("D1").Offset(0, i).Value = rst.Fields(i).name
    Next
    '输出数据
    Range("D2").CopyFromRecordset rst

    rst.Close
    AdoConn.Close
    
    Set rst = Nothing
    Set AdoConn = Nothing
End Sub

比起用字典等方式来删除重复,显然方便多了。

当然用distinct关键字会更方便。

0 人点赞