返回列表 上一主題 發帖

如何判斷為同一組(進階問題)

回復 8# 准提部林


    謝謝論壇,謝謝前輩
後學藉此帖學習前輩的方案,方案學習心得註解如下,請前輩在指導

執行前:


執行結果:



Option Explicit
Sub NumberCode()
Dim Arr, i&, xD, T$, TC$
'↑宣告變數
Set xD = CreateObject("Scripting.Dictionary")
'↑令xD變數是字典
Arr = Range([D2], [A65536].End(3))
'↑令Arr變數是 二維陣列,以A~D欄第2列以下儲存格值帶入陣列中
For i = 1 To UBound(Arr)
'↑設順迴圈!
    T = Arr(i, 1) & Arr(i, 2):  TC = xD(T)
    '↑令T變數是 第1欄與第2欄陣列值所組成的新字串,
    '令TC變數是 以T變數查xD字典回傳item值

    If TC = "" Then xD(T) = "|" & Arr(i, 4): GoTo 101
    '↑如果TC變數是空的!就令T變數當key,item是"|"字元連接第4欄陣列值,
    '所組成的新字串,然後就跳到101標示位置繼續執行

    If TC <> "|" & Arr(i, 4) Then xD(T) = "異常"
    '↑如果TC變數值不同於 "|"連接第4欄Arr陣列值?
    '就令T變數在xD字典裡的item值換為 "異常"字串

101: Next i
For i = 1 To UBound(Arr)
'↑設順迴圈!
    T = Arr(i, 1) & Arr(i, 2): Arr(i, 1) = ""
    '↑令T變數是 第1欄與第2欄陣列值所組成的新字串,
    '清除掉Arr陣列第1欄的值

    If xD(T) = "異常" Then Arr(i, 1) = "x"
    '↑如果以T變數查xD字典回傳item值是 "異常",
    '就令當列Arr陣列第1欄的值是 "x"

Next i
[G2].Resize(UBound(Arr)) = Arr
'↑令Arr陣列值從[G2]儲存格開始寫入,超過此範圍的陣列值忽略
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

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

Option Explicit
Sub TEST()
Dim Brr, Y, i&, T$, T4$
'↑宣告變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是 字典
Brr = Range([D2], Cells(Rows.Count, 1).End(xlUp))
'↑令Brr變數是 二維陣列,以A~D欄第2列以下儲存格值帶入陣列中
For i = 1 To UBound(Brr)
'↑設順迴圈
   T = Brr(i, 1) & Brr(i, 2): T4 = Brr(i, 4) & "|"
   '↑令T變數是 第1欄與第2欄陣列值所組成的新字串,
   '令T4變數是 第4欄陣列值連接 "|"符號所組成的新字串

   If Y(T) <> T4 And Y(T) <> "" Then Y(T & "|") = "X" Else Y(T) = T4
   '↑如果T變數查Y字典得item值與 T4變數不同,而且
   '且T變數查Y字典得item值不是初始值!就令T變數連接"|"組成的新字串當key,
   'item是"X",納入Y字典中,
   '否則就令T變數當key,item是T4變數納入Y字典中

Next
For i = 1 To UBound(Brr)
'↑設順迴圈
   Brr(i, 1) = Y(Brr(i, 1) & Brr(i, 2) & "|")
   '↑令Brr陣列第1欄寫入 第1欄與第2欄陣列值連接"|"組成的新字串,
   '查Y字典回傳item值

Next
[G2].Resize(UBound(Brr)) = Brr
'↑令從[G2]儲存格開始寫入Brr陣列值,超過此範圍的陣列值忽略
Set Y = Nothing: Erase Brr
'↑令釋放變數
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 【是否發揮了良能?】人間壽命因為短暫,才更顯得珍貴。難得來一趟人間,應問是否為人間發揮了自己的良能,而不要一味求長壽。
返回列表 上一主題