- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
10#
發表於 2024-2-23 14:12
| 只看該作者
謝謝論壇,謝謝各位前輩
後學以1#範例練習陣列與字典,學習另一情境需求方案如下,請各位前輩指教
執行前:
執行結果:
Option Explicit
Sub TEST_2()
Dim Brr, Z, i&, R&, N&, T1$, T2$, C%, U%, M%
'↑宣告變數:&是長整數,%是短整數,$是字串變數,沒有指定的是通用型變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z這通用型變數是 字典
Brr = Range([B1], [A65536].End(xlUp))
'↑令Brr這通用型變數是二維陣列,以[B1]到 A欄最後有內容儲存格,這兩儲存格涵蓋方正範圍儲存格值帶入陣列中
ReDim Crr(UBound(Brr), UBound(Brr))
For i = 2 To UBound(Brr)
'↑設順迴圈!令i變數從1 到Brr陣列縱向最大索引列號
T1 = Trim(Brr(i, 1)): R = Z(T1): T2 = Trim(Brr(i, 2)): C = Z(T1 & T2): U = Z(T1 & "/c")
'↑令T1這字串變數是 i迴圈列1欄Brr陣列值去除頭尾空白字元後的新字串
'令R這長整數變數是以 T1變數查Z字典回傳item值(如果R是0,這程序已經建立key=T1,item=0 在Z字典中)
'令T2這字串變數是 i迴圈列2欄Brr陣列值去除頭尾空白字元後的新字串
'令C這短整數變數是以 T1變數連接T2變數組成的新字串查Z字典回傳item值(如果C是0,這程序已經建立key=T1 & T2,item=0 在Z字典中)
'令U這短整數變數是以 T1變數連接"/c"字串組成的新字串查Z字典回傳item值(如果U是0,這程序已經建立key=T1 & "/c",item=0 在Z字典中)
If R = 0 Then N = N + 1: R = N: Crr(R, 0) = T1: Z(T1) = N
'↑如果R變數是 0!就令N變數累加1,令R變數同N變數,令R變數列0欄Crr陣列值是 T1變數,令T1變數為key的item值換以 N變數放回Z字典中
If C = 0 Then U = U + 1: Crr(R, U) = T2: Z(T1 & "/c") = U: Z(T1 & T2) = 1
'↑如果C變數是 0!就令U變數累加1,令R變數列U變數欄Crr陣列值是 T2變數,
'令T1變數連接"/c"字串組成的新字串為key的item值換以 U變數放回Z字典中
'令T1變數連接T2變數組成的新字串為key的item值換以 數字1放回Z字典中
If M < U Then M = U: Crr(0, M) = Brr(1, 2) & "_" & M
'如果M這短整數小於M變數!就令M變數同U變數,令0列M變數欄Crr陣列值是 第1列2欄Brr陣列值,連接下底線,再連接M變數所組成的新字串
i01: Next
Crr(0, 0) = Brr(1, 1) & "\" & Brr(1, 2): [I1].Resize(N + 1, M + 1) = Crr
'↑令[I1]儲存格向下擴展N變數列,向右擴展2欄的儲存格範圍,以Brr陣列值帶入
End Sub |
|