返回列表 上一主題 發帖

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

本帖最後由 Andy2483 於 2023-12-1 18:56 編輯

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
執行前:


執行結果:


Option Explicit
Sub TEST()
Dim Brr, Z, A, i&, j%, R&, Y&, T$
'↑宣告變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是字典
Brr = Range([C1], [A65536].End(3))
'↑令Brr變數是裝入儲存格值的二維陣列
For i = 2 To UBound(Brr)
'↑設順迴圈!從2到Brr陣列最大索引列號
   T = Brr(i, 1) & "|" & Brr(i, 3)
   '↑令T變數是第1欄與第3欄陣列值以 "|"符號串接的新字串
   Z(T) = Z(T) + 1: Z(T & "/r") = i
   '↑令T變數為key的item值累加1(這是要記錄字串組出現過幾次)
   '↑令T變數連接"/r" 的新字串為key,item是索引列號,納入Z字典中

Next
For Each A In Z.Keys
'↑設逐項迴圈!令A是Z字典裡的Keys之一
   If Right(A, 2) = "/r" Or Z(A) > 1 Then GoTo A01
   '↑如果是記錄列號或 字串組出現過次大於1 的都跳過
   R = R + 1: Y = Z(A & "/r")
   '↑令R變數累加1 (這是要讓符合條件的資料放置的列號)
   For j = 1 To 3: Brr(R, j) = Brr(Y, j): Next
   '↑令符合條件的資料寫入指定的陣列位置
A01: Next
If R = 0 Then Exit Sub Else [J:L].ClearContents
'↑如果沒有符合條件的資料!就結束程式執行,否則清除舊的結果格內容
[J2].Resize(R, 3) = Brr
'↑令擴展的儲存格區域以Brr陣列值寫入,超過該範圍的陣列值忽略
[J1:L1] = [A1:C1].Value
'↑令新標題位置格值等於 原標題值
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 【停滯不前,終無所得】人都迷於尋找奇蹟,因而停滯不前;縱使時間再多、路再長,也了無用處,終無所得。
返回列表 上一主題