- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
4#
發表於 2023-12-4 13:24
| 只看該作者
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
執行前:
執行結果:
Option Explicit
Sub TEST()
Dim Arr, Brr, Crr, Z, i&, j%, R
'↑宣告變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是 字典
R = Application.Match("小計", [A:A], 0)
'↑令R變數是 表格函數Match()的回傳值
If IsError(R) Then Exit Sub Else R = R - 1
'↑如果R變數是錯誤值? True就結束程式執行,否則令R-1
Brr = Range([AS5], [AN65536].End(3))
'↑令Brr變數是 盛裝資料格值的二維陣列
Crr = Range([A1], Cells(R, "AH"))
'↑令Crr變數是 盛裝整個結果格值的二維陣列
ReDim Arr(4 To R, 4 To UBound(Crr, 2))
'↑令Arr變數是結果目標格範圍的空陣列
For i = 4 To R
'↑設順迴圈!i從4到 R變數
If Trim(Crr(i, 3)) <> "" Then Z(Trim(Crr(i, 3))) = i
'↑如果i迴圈列/姓名欄Crr陣列值不是空的?
'True就令姓名為key,item是列號納入Z字典中
Next
For i = 1 To UBound(Brr)
'↑設順迴圈!i從1到 Brr陣列縱向最大索引號列(迴圈跑資料陣列)
If Z(Trim(Brr(i, 1)) & "") = 0 Then GoTo i02
'↑如果資料陣列i迴圈列/姓名欄是空的就 跳到標示i02位置繼續執行
For j = Val(Brr(i, 2)) + 3 To Val(Brr(i, 4)) + 3
Arr(Z(Trim(Brr(i, 1)) & ""), j) = Brr(i, 6)
Next
'↑設順迴圈將代碼填入結果目標陣列中
i02: Next
[D4].Resize(UBound(Arr) - 3, UBound(Arr, 2) - 3) = Arr
'↑令結果目標格填入Arr陣列值
End Sub |
|