- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
13#
發表於 2023-6-2 14:55
| 只看該作者
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
Option Explicit
Sub TEST()
Dim Brr, Crr, Y, R%, i&, j%, T%
'↑宣告變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是 字典
Range([H1], Cells(1, Columns.Count)).EntireColumn.Delete
'↑令H欄到最後欄刪除
Brr = Range([C3], [A65536].End(3))
'↑令Brr變數是 二維陣列,以[A3]到C欄最後一個有內容儲存格值帶入
ReDim Crr(1 To 8, 1 To 200)
'↑令Crr變數是 二維空陣列,縱向範圍1~8,橫向範圍1~200
Y("上區") = 0: Y("下區") = 4
'↑令"上區"字串當key,item是 0;令"下區"字串當key,item是 4:納入Y字典裡
For i = 1 To UBound(Brr)
'↑設順迴圈
T = Brr(i, 1)
'↑令T變數是第1欄Brr陣列值
R = IIf(T > 6, Y("下區"), Y("上區")): Y(R) = Y(R) + 1
'↑令R變數是IIf()回傳值,如果T變數 大於6,回傳4,否則0
'↑令在Y字典裡0或4的key,其item值累加1(紀錄欄最後索引號)
For j = 1 To 3
'↑設順迴圈
Crr(R + j, Y(R)) = Brr(i, j)
'↑令Brr陣列值寫入Crr陣列指定位置裡
Next j
If Y(R) > Y("欄數") Then Y("欄數") = Y(R)
'↑如果上下區的欄號大於 以"欄數"查Y字典的item值,
'就令Y字典的"欄數"key對應的item值是 上下區的欄號
'Y("欄數")是為了計算陣列最大需求欄數
Next
With [h2].Resize(UBound(Crr), Y("欄數"))
.Value = Crr
'↑令儲存格值以Crr陣列帶入
.Borders.LineStyle = 1
'↑令儲存格框線是細實線
.ColumnWidth = 4
'↑令儲存格欄寬是 4
.Font.Size = 14
'↑令儲存格字大小是 4
End With
Set Y = Nothing: Erase Brr, Crr
'↑令釋放變數
End Sub |
|