- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
8#
發表於 2022-11-29 13:57
| 只看該作者
本帖最後由 Andy2483 於 2022-11-29 14:00 編輯
回復 1# 星空乂羽翼
謝謝前輩發表此主題與範例
謝謝 samwang前輩提供解決方法與解說,後學學習後用相同方法,不同的陳述方式練習陣列與字典
心得註解如下,請各位前輩再指導
Option Explicit
Sub TEST()
Application.DisplayAlerts = False
Dim Brr, C&, x, V, xD, Sh, Tym$, mm&
'↑宣告變數
Set Sh = Sheets("P-012-02A-預定工作進度表")
'↑令Sh 是工作表(以下稱:進度表),名稱是 "P-012-02A-預定工作進度表"
Set xD = CreateObject("Scripting.Dictionary")
'↑令xD 是字典
C = Sh.UsedRange.EntireColumn.Columns.Count
'↑令C 是有使用儲存格範圍的最大欄位數
Brr = Sh.Range(Sh.Cells(5, 1), Sh.Cells(5, C))
'↑令Brr 是二維陣列!倒入從進度表[A5]到第五列最後一欄儲存格範圍儲存格值
For x = 1 To UBound(Brr, 2)
'↑設順迴圈從1到Brr陣列橫向欄位的最大欄位數
If IsDate(Brr(1, x)) Then
'↑如果迴圈陣列值是日期??
Tym = Format(Brr(1, x), "yyyy/mm")
'↑如果If條件成立!令Tym字串變數 是迴圈陣列值轉化為 四碼年加 "/" 符號加 兩碼月的字串
If xD.Exists(Tym) = Empty Then
'↑如果用 Tym字串變數查察字典裡是初始值
Set xD(Tym) = Sh.Cells(4, x)
'↑令Tym字串變數是 xD字典裡的key,Item是進度表第4列.迴圈欄的儲存格
Else
Set xD(Tym) = Union(xD(Tym), Sh.Cells(4, x))
'↑令Tym字串變數是 xD字典裡的key,
'Item是原本Item裡的儲存格再加入 進度表第4列.迴圈欄的儲存格的 儲存格集
End If
End If
Next
V = Split(",一,二,三,四,五,六,七,八,九,十,十一,十二", ",")
'↑令V是字串用 ","符號分割的一維陣列
For Each x In xD.Keys
'↑設順迴圈!令x是 xD字典Keys的一員
xD(x).UnMerge
'↑xD字典裡迴圈Key對應的 儲存格集取消合併儲存格
xD(x).Merge
'↑xD字典裡迴圈Key對應的 儲存格集執行合併儲存格
xD(x).HorizontalAlignment = xlCenter
'↑xD字典裡迴圈Key對應的 儲存格集文字左右置中
mm = Split(x, "/")(1)
'↑令mm&數字變數是x用 "/"符號拆解的一維陣列!取第 1個字串轉成數字(月份)
'因為此一維陣列元素是字串,因宣告是mm數字!所以字串會變成數字
'ps:此一維陣列的第0個字串是(四碼年分)
xD(x)(1) = V(mm) & "月"
'↑xD字典裡迴圈Key對應的 儲存格集第一格填入文字:
'文字是用mm數字抓取 V一維陣列裡對應的國字數字串,後面再加 "月"字
Next
Set Brr = Nothing
Set xD = Nothing
End Sub |
|