返回列表 上一主題 發帖

[發問] 保留沒有重複的欄位

回復 1# ssooi


兩種寫法   自己挑一個
Sub t1()
o = Split("Provider=Microsoft.,,.0;Extended Properties=Excel ,,.0;Data Source=" & ThisWorkbook.FullName, ",")
Set cn = CreateObject("adodb.connection"): If Application.Version > 12 Then o(1) = "ACE.OLEDB.12": _
o(3) = 12: cn.Open Join(o, "") Else o(1) = "Jet.OLEDB.4": o(3) = 8: cn.Open Join(o, "")
    q = "SELECT a.序號, a.時程, a.牌子 FROM [工作表2$A1:C] as a "
q = q & "WHERE EXISTS ( SELECT 1 FROM [工作表2$A1:C] AS b "
q = q & "               WHERE b.序號 = a.序號 AND b.牌子 = a.牌子 "
q = q & "               GROUP BY b.序號, b.牌子 HAVING COUNT(*) = 1)"
[G:J].ClearContents: [G1].CopyFromRecordset cn.Execute(q)
End Sub




Sub t2()
o = Split("Provider=Microsoft.,,.0;Extended Properties=Excel ,,.0;Data Source=" & ThisWorkbook.FullName, ",")
Set cn = CreateObject("adodb.connection"): If Application.Version > 12 Then o(1) = "ACE.OLEDB.12": _
o(3) = 12: cn.Open Join(o, "") Else o(1) = "Jet.OLEDB.4": o(3) = 8: cn.Open Join(o, "")
    q = "SELECT a.序號, a.時程, a.牌子 FROM [工作表2$A1:C] AS a "
q = q & "WHERE ( SELECT COUNT(*) FROM [工作表2$A1:C] AS b "
q = q & "        WHERE b.序號 = a.序號 AND b.牌子 = a.牌子) = 1"
[G:J].ClearContents: [G1].CopyFromRecordset cn.Execute(q)
End Sub

TEST.zip (15.54 KB)

TOP

本帖最後由 singo1232001 於 2023-12-2 07:56 編輯

回復 19# singo1232001



   Sub t5()
I = Split("Provider=Microsoft.,Jet.OLEDB.4,.0;Extended Properties=Excel ,8,.0;Data Source=", ",")
If Application.Version > 12 Then I(1) = "ACE.OLEDB.12": I(3) = 12
Set cn = CreateObject("adodb.connection"): cn.Open Join(I, "") & ThisWorkbook.FullName
   q = "SELECT a.序號, a.時程, a.牌子 FROM [工作表2$A1:C] AS a WHERE (  SELECT COUNT(*) "
q = q & "FROM [工作表2$A1:C] AS b WHERE b.序號 = a.序號 AND b.牌子 = a.牌子) = 1"
[G:J].ClearContents: [G1].CopyFromRecordset cn.Execute(q)
End Sub

我覺得 前三行的方式 應該是adodb.connection 呼叫最簡短的一種寫法了

TOP

        靜思自在 : 虛空有盡.我願無窮,發願容易行願難。
返回列表 上一主題