返回列表 上一主題 發帖

請教2重下拉式選單篩選的問題

本帖最後由 Andy2483 於 2024-2-23 09:06 編輯

謝謝論壇,謝謝各位前輩
後學以1#範例練習陣列與字典,學習情境結果方案如下,請各位前輩指教
執行前:


執行結果:


Option Explicit
Sub TEST()
Dim Brr, Z, i&, R&, N&, T1$, T2$
'↑宣告變數:&是長整數,$是字串變數,沒有指定的是通用型變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z這通用型變數是 字典
Brr = Range([B1], [A65536].End(xlUp))
'↑令Brr這通用型變數是二維陣列,以[B1]到 A欄最後有內容儲存格,這兩儲存格涵蓋方正範圍儲存格值帶入陣列中
For i = 1 To UBound(Brr)
'↑設順迴圈!令i變數從1 到Brr陣列縱向最大索引列號
   T1 = Trim(Brr(i, 1)): R = Z(T1): T2 = Trim(Brr(i, 2))
   '↑令T1這字串變數是 i迴圈列1欄Brr陣列值去除頭尾空白字元後的新字串
   '令R這長整數變數是以 T1變數查Z字典回傳item值,令T2這字串變數是 i迴圈列2欄Brr陣列值去除頭尾空白字元後的新字串

   If R = 0 Then N = N + 1: R = N: Brr(R, 1) = T1: Brr(R, 2) = T2: Z(T1) = R: GoTo i01
   '↑如果R變數是 0!就令N變數累加1,令R變數同N變數,令R列1欄Brr陣列值是 T1變數,令R列2欄Brr陣列值是 T2變數
   '令T1變數為key的item值換以 R變數放回Z字典中,令程序跳到標示 i01位置繼續執行

   If InStr("/" & Brr(R, 2) & "/", "/" & T2 & "/") = 0 Then Brr(R, 2) = Brr(R, 2) & "/" & T2
   '↑如果R列2欄Brr陣列值在前後連接"/"符號所組成的新字串裡 沒有包含T2變數在前後連接"/"符號所組成的新字串!,
   '就令T2變數以"/"連接在R列2欄Brr陣列值裡

i01: Next
[E1].Resize(N, 2) = Brr
'↑令[E1]儲存格向下擴展N變數列,向右擴展2欄的儲存格範圍,以Brr陣列值帶入
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

謝謝論壇,謝謝各位前輩
後學以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
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 虛空有盡.我願無窮,發願容易行願難。
返回列表 上一主題