返回列表 上一主題 發帖

[發問] 請問VBA可以篩選後,對其結果再進行進階篩選嗎?

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

執行前:


輸入 2021/11/21 後按鈕執行結果:



Option Explicit
Sub TEST()
Dim Brr, Z, V1&, V2&, V3, i&, j%, R&, N&, T$
'↑宣告變數
Intersect(ActiveSheet.UsedRange, [U2:Z65536]).ClearContents
If IsDate([S2]) = False Then MsgBox "[S2]需輸入日期": Exit Sub
'↑如果[S2]儲存格值不是日期? True就跳出提示,結束程式執行
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是 字典
Brr = Range([F1], [A65536].End(xlUp))
'↑令Brr變數是 二維陣列,以A~F欄儲存格值帶入陣列中
For i = 2 To UBound(Brr)
'↑設順迴圈
   T = Brr(i, 1) & "|" & Brr(i, 3) & "|" & Brr(i, 4)
   '↑令T變數是 第1.3.4欄迴圈陣列值的組合字串,中間以"|"間隔
   If InStr(T, [S2] & "|") = 0 Then GoTo i01
   '↑如果T組合字串不符合條件? True就跳到標示i01位置繼續執行
   If Z(Brr(i, 4)) = "" Then V1 = V1 + 1: Z(Brr(i, 4)) = 1
   '↑如果商品名稱不在Z字典裡? True就令V1變數累加1後,
   '將 商品名稱key對應item改為1

   V2 = V2 + Brr(i, 5): V3 = V3 + Brr(i, 6)
   '↑令V2變數累加 數量,'↑令V3變數累加 消費金額
   N = Z(T)
   '↑令N變數是 以T變數查Z字典回傳item值
   If N = 0 Then
   '↑如果N變數是 0
      R = R + 1: For j = 1 To 6: Brr(R, j) = Brr(i, j): Next
      '↑令R變數累加1,設順迴圈將迴圈列陣列值謄到指定的 R變數列
      Z(T) = R: GoTo i01
     '↑令T變數key對應item改為R變數,令跳到標示i01位置繼續執行
   End If
   Brr(N, 5) = Brr(N, 5) + Brr(i, 5): Brr(N, 6) = Brr(N, 6) + Brr(i, 6)
   '↑令第二次以上出現的T變數,其數量與消費金額累加
i01: Next
If R > 0 Then R = R + 1 Else: MsgBox "無符合條件資料": Exit Sub
For j = 1 To 3: Brr(R, j) = "": Next
Brr(R, 4) = V1: Brr(R, 5) = V2: Brr(R, 6) = V3
'↑令加總值放在陣列裡
[U2].Resize(R, 6) = Brr
'↑令從[U2]擴展範圍儲存格值以Brr陣列值寫入,超過範圍的陣列值忽略
Set Z = Nothing: Erase Brr
'↑令釋放變數
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題