- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
不用字典物件的寫法- Option Explicit
- Sub Ex_重複值分組()
- Dim Rng As Range, Ar(), Arr(), F As Boolean
- Set Rng = Range("A1").CurrentRegion '**Set (設立物件):編號組別資料欄位所在的位置
- Application.ScreenUpdating = False '** 如果開啟螢幕更新,則本屬性值為 True。 可讀寫的 Boolean
- With Cells(1, Columns.Count - 1) '**With :陳述式會針對執行一系列陳述式的單一物件
- .CurrentRegion.Clear '**CurrentRegion傳回Range物件,代表目前的區域。 目前區域是指以任意空白列及空白欄的組合為邊界的範圍
- Rng.Columns(2).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Cells(1), Unique:=True '**AdvancedFilte:進階篩選 (組別不重複)
- .Range("A:A").Sort Key1:=.Cells(1), Header:=xlYes, Order1:=xlAscending '**Sort 排序(組別)
- Arr = .Range("A:A").SpecialCells(xlCellTypeConstants).Value '** 組別 (排序後)置入陣列中
- Ar = Arr
- Ar(1, 1) = "編號"
- Rng.Copy .Cells '**複製編號組別資料
- .CurrentRegion.Sort Key1:=.Cells(1), Order1:=xlAscending, Key2:=.Cells(1, 2), Header:=xlYes, Order2:=xlAscending '**Sort 排序(1編號2駔別)
- Set Rng = .Range("A2") '**Set (設立物件): 複製編號組別資料後的.Range("A2")位置
- End With
- '******重複值分組 ****
- F = True '**F變數為布林值(Boolean) : 判定:編號分組是否重複
- Do While Rng.Range("A2") <> "" '**While 迴圈運行的條件
- With Rng
- If .Range("a1") = .Range("a2") And (.Range("b1") <> .Range("b2") And .Range("b1") <> "" And .Range("b2") <> "") Then
- ' Range("a1") = .Range("a2")**同一編號** : And (.Range("b1") <> .Range("b2")**不同駔別** And .Range("b1") <> "" And .Range("b2") <> ""
- If F Then '**不重複 (編號分組)
- F = False '**重複 (編號分組)
- ReDim Preserve Ar(1 To UBound(Ar), 1 To UBound(Ar, 2) + 1) '** Preserve關鍵字, 只能變更最後一個維度的大小, 而且仍然保留陣列的內容
- Ar(1, UBound(Ar, 2)) = .Value '** 置入編號
- Ar(Application.Match(.Range("b1"), Arr, 0), UBound(Ar, 2)) = .Range("b1")
- '**Application.Match(.Range("b1"), Arr, 0) '** 於組別(排序後)陣列中尋找 該組別的位置
- End If
- Ar(Application.Match(.Range("b2"), Arr, 0), UBound(Ar, 2)) = .Range("b2")
- End If
- End With
- If Rng <> Rng.Range("A2") Then F = True '**不同的編號時,F變數為:不重複 (編號分組)
- Set Rng = Rng.Range("A2") '**Set (設立物件) 下一個編號位置
- Loop
- With Range("f1")
- .CurrentRegion.Clear
- .Resize(UBound(Ar, 2), UBound(Ar, 1)) = Application.Transpose(Ar) '**Application.Transpose(Ar): 翻轉(Ar),Ar為二維陣列
- End With
- Cells(1, Columns.Count - 1).CurrentRegion.Clear
- Application.ScreenUpdating = True
- End Sub
複製代碼 |
|