- 帖子
- 1567
- 主題
- 40
- 精華
- 0
- 積分
- 1591
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2026-2-2
|
2#
發表於 2023-6-7 09:52
| 只看該作者
本帖最後由 Andy2483 於 2023-6-7 10:07 編輯
回復 1# shuo1125
謝謝前輩發表此主題與範例檔
後學藉此帖練習陣列與字典,學習方案如下,請前輩參考
資料表:
統計表執行前:
執行結果:
這是不自動(擴增或縮減)年分欄位的方案(用公式應該也能處理)
Option Explicit
Sub TEST()
Dim Brr, V&, Y, Z, i&, j%, T$, xR As Range
Set Y = CreateObject("Scripting.Dictionary")
Brr = Range([資料!D2], [資料!A65536].End(3))
For i = 1 To UBound(Brr)
T = Brr(i, 1): V = Brr(i, 4)
Z = Switch(V <= 5000, "5000以下", (V > 5000) * (V <= 10000), "5001~10000", V > 10000, "10000以上")
Y(T & "|" & Z) = Y(T & "|" & Z) + V: Y(T & "|" & Z & "|Qty") = Y(T & "|" & Z & "|Qty") + 1
Next
'=========================================
[統計!B2:G4,統計!B8:G10].ClearContents
Set xR = [統計!A1:G4]: Brr = xR
For i = 2 To UBound(Brr)
For j = 2 To UBound(Brr, 2): Brr(i, j) = Y(Brr(1, j) & "|" & Brr(i, 1)): Next
Next
xR = Brr
'=========================================
Set xR = [統計!A7:G10]: Brr = xR
For i = 2 To UBound(Brr)
For j = 2 To UBound(Brr, 2): Brr(i, j) = Y(Brr(1, j) & "|" & Brr(i, 1) & "|Qty"): Next
Next
xR = Brr
Set Y = Nothing: Set xR = Nothing: Erase Brr
End Sub |
|