- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
6#
發表於 2023-6-6 11:07
| 只看該作者
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
Option Explicit
Sub TEST()
Dim Brr, Crr, Y, i&, T1$, T2$
'↑宣告變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是 字典
Brr = Range([B2], [A65536].End(3))
'↑令Brr變數是二維陣列,以[B2]到A欄最後一有內容的儲存格值帶入
For i = 1 To UBound(Brr)
'↑設順迴圈
T1 = Brr(i, 1): T2 = Brr(i, 2)
'↑令變數裝入迴圈陣列值,可以定義值的型態,也可縮短程式碼
If T1 = "" Or T2 = "" Then GoTo i01
'↑如果T1變數是空的或 T1變數是空的?就跳到標示i01位置繼續執行
If Y(T1) = "" Then Y(T1) = T2: GoTo i01
'↑如果以T1變數查Y字典得item值是 空的?
'是就令T1變數當key,item是T2變數,納入Y字典中,跳到標示i01位置繼續執行
If InStr("," & Y(T1) & ",", "," & T2 & ",") = 0 Then
'↑如果以T1變數提取Y字典中item值有沒有包含 T2變數?
'InStr()中的元素都以逗號包夾後再判斷,降低巧合的意外機率
Y(T1) = Y(T1) & "," & T2
'↑令T1變數在Y字典中的item值連接T2變數,中間以逗號隔開
End If
i01: Next
Brr = Range([D2], [D65536].End(3))
'↑令Brr變數是二維陣列,換裝[B2]到A欄最後一有內容的儲存格值
ReDim Crr(1 To UBound(Brr), 1 To 1)
'↑令Crr變數是 二維空陣列,縱向範圍同Brr陣列,橫向1~1
For i = 1 To UBound(Brr)
'↑設順迴圈
Crr(i, 1) = Y(Brr(i, 1))
'↑令Crr陣列值是 Brr陣列值查Y字典的item值
Next
[E2:E65536].ClearContents
'↑令儲存格舊結果清除
[E2].Resize(UBound(Crr)) = Crr
'↑令從[E2]儲存格開始寫入Crr陣列值
Set Y = Nothing: Erase Brr, Crr
'↑令釋放變數
End Sub |
|