返回列表 上一主題 發帖

兩組數值去除重複的資料後排序

回復 3# hcm19522


Sub 去重排序()
With CreateObject("adodb.connection"): V = Application.Version
If V >= 12 Then V = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0; "
If V < 12 Then V = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0; "
.Open V & "Data Source=" & ThisWorkbook.FullName

Set s = Sheets("工作表1")
s.Columns(4).ClearContents
s.Rows("1:1").Insert Shift:=xlDown
s.Range("a1:b1") = Array("a", "b")
q = "select a as a from [工作表1$A1:A] " & vbCrLf & " union all "
q = q & vbCrLf & " select b as a from [工作表1$B1:B]"
q = "select distinct a from (" & q & ")  order by a "
s.Range("d2").CopyFromRecordset .Execute(q)
s.Rows("1:1").Delete: End With
End Sub

sql去重排序.zip (18.18 KB)

TOP

本帖最後由 singo1232001 於 2023-3-21 23:16 編輯

回復 7# henry860608

倘若沒學過SQL 可以直接跳過 使用其他大大的解法比較方便 學習路線也比較正規

另外使用此方法都需要安裝 .Framework 3.5
包括q大的arraylist

以下解釋q值中,SQL語法解釋

select distinct a from
(select a as a from [工作表1$A1:A]
union all
select b as a from [工作表1$B1:B] )  
                                                                order by a



1.
獲取工作表1中的A欄資料
select a as a from [工作表1$A1:A]

合併
union all

工作表1中的B欄資料
select b as a from [工作表1$B1:B]


2.
select distinct a from      '將1.部分獲取整理好的資料 distinct去重
(select a as a from [工作表1$A1:A]
union all
select b as a from [工作表1$B1:B] )  
                                                                order by a    '並且order by排序


若你對SQL有興趣 從2019年後,免費網路課程非常多 尤其B站上 從零開始學 大概2~3個月就可以
真正意義上並不是拿來給excel單獨用的
只不過剛好可以拿vba訓練語法  實際用在SQL server 與vba上
面對現實的高負荷場景,超過30000筆以上的資料 或者多表整合 就是SQL的罩門
尤其在內網中 多台電腦 進銷存 或者接爬蟲上都有很強大的便利性  而且不用擔心 資料編碼異常 比如"温" "羣" 這類excel 會異常的文字
當然未來也能運用到ptSQL 或者MySQL

TOP

        靜思自在 : 自己害自己,莫過於亂發脾氣。
返回列表 上一主題