- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
30#
發表於 2022-9-19 16:46
| 只看該作者
回復 25# 准提部林
謝謝前輩指導
前輩的程式碼太精簡了
後輩由 簡化繁,逐步練習字典與陣列
今習得 字典.Add- Option Explicit
- Sub TEST_20220919()
- Dim Arr, Brr, R&, C&, i&, j&, k%, T$, TT, Y
- TT = Timer
- R = Cells(Rows.Count, "d").End(xlUp).Row '最後一行
- C = Cells(12, Columns.Count).End(xlToLeft).Column '最後一欄
- Set Y = CreateObject("Scripting.Dictionary")
- For i = 1 To 13 Step 4
- Y.Add Mid(Cells(11, i + 12), 2, 2), i
- Next
- Arr = Range([A1], Cells(R, C)) '定義資料範圍--A1至整個區
- ReDim Brr(1 To UBound(Arr) - 12, 1 To 20) '設空陣列
- For i = 13 To UBound(Arr)
- For j = [AG1].Column To UBound(Arr, 2) Step 4
- T = Right(Split(Arr(11, j), "]")(0), 2) '取[??]中的文字
- C = Y(T) '檢測各分項要填入Brr的位置
- If C = 1 Then '前置--取最大
- For k = 0 To 2
- If Arr(i, j + k) > Brr(i - 12, C + k) Then
- Brr(i - 12, C + k) = Arr(i, j + k)
- End If
- Next k
- ElseIf C >= 5 Then '其它項--累計
- For k = 0 To 2
- Brr(i - 12, C + k) = Brr(i - 12, C + k) + Arr(i, j + k) '各分項累計
- Brr(i - 12, 17 + k) = Brr(i - 12, 17 + k) + Arr(i, j + k) '合計
- Next k
- End If
- Next j
- Next i
- [M13].Resize(UBound(Brr), UBound(Brr, 2)) = Brr
- MsgBox Timer - TT
複製代碼 |
|