返回列表 上一主題 發帖

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

好喔 感謝大大熱情分享 晚點就來試試看

TOP

回復 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

google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

本帖最後由 Andy2483 於 2023-3-20 12:04 編輯

[attach]35988[/attach]回復 1# henry860608


    謝謝前輩發表此主題與情境
後學練習陣列與字典的解決方案如下,請前輩參考

執行前:


執行結果:


Option Explicit
Sub TEST()
Dim Brr, Y, C%, R&
'↑宣告變數:(Brr,Y)是通用型變數,C是短整數,R是長整數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y這通用型變數是 字典
[C:C].ClearContents
'↑令C欄儲存格內容清除
Brr = Range([B1], Cells(Rows.Count, "A").End(3))
'↑令Brr這通用型變數是 二維陣列,
'以[B1]到A欄最後有內容儲存格值帶入

For C = 1 To 2
'↑設順迴圈!C從1到 2
   For R = 1 To UBound(Brr)
   '↑設順迴圈!R從1到 Brr陣列縱向最大索引列號
      Y(Brr(R, C)) = ""
      '↑令R迴圈列R迴圈欄Brr陣列值當key,item是空字元,納入Y字典裡
      '若key重複只留一筆

   Next
Next
With [C1].Resize(Y.Count, 1)
'↑以下是關於[C1]儲存格擴展向下(Y字典key數量)列的相關程序
   .Value = Application.Transpose(Y.Keys)
   '↑令儲存格值以 Y字典key轉置後值帶入
   .Sort KEY1:=.Item(1), Order1:=1, _
   Header:=0, Orientation:=1
   '↑令以[C1]作為排序基準做一層次無標題列的縱向順排序
End With
Erase Brr: Set Y = Nothing
'↑令釋放變數
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 有多少力量就做多少事,不要心存等待,等待才會落空。
返回列表 上一主題