- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
8#
發表於 2023-6-6 16:18
| 只看該作者
本帖最後由 Andy2483 於 2023-6-6 16:20 編輯
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
資料表:
結果表執行前:
執行結果:
Option Explicit
Sub TEST()
Dim Brr, Crr, Y, T$, T1$, V&, i&, Sh1 As Worksheet, Sh2 As Worksheet
'↑宣告變數
Set Sh1 = Sheets("N90122購貨明細貼上"): Set Sh2 = Sheets("菸架")
'↑令變數裝入物件(工作表)
Set Y = CreateObject("Scripting.Dictionary")
'↑Y變數是 字典
Brr = Range(Sh1.[J1], Sh1.Cells(Rows.Count, 1).End(3))
'↑令Brr變數是 二維陣列,以A~J儲存格值帶入陣列中
For i = 2 To UBound(Brr)
'↑設順迴圈
T1 = Brr(i, 1): T = Brr(i, 3): V = Brr(i, 6)
'↑令T1變數是 第1欄陣列值(字串),令T變數是 第3欄陣列值(字串),
'令V變數是 第6欄陣列值(數值)
If InStr(T1, "1") = 1 Then Y(T) = Y(T) + V / 10
'↑如果T1變數第1個字是 1?
'是就令在Y字典裡的T變數key其item累加(V變數除10)的數值
Next i
Brr = Range(Sh2.[B2], Sh2.Cells(Rows.Count, 1).End(3))
'↑令Brr變數是 二維陣列,換以A~B儲存格值帶入陣列中
ReDim Crr(1 To UBound(Brr), 1 To 1)
'↑令Crr變數是 二維空陣列,縱向範圍同Brr陣列,橫向1~1
For i = 1 To UBound(Brr)
'↑設順迴圈
Crr(i, 1) = Val(Y(Brr(i, 1) & Brr(i, 2)))
'↑令Crr陣列值是 第1欄Brr陣列值連接第2欄Brr陣列組成的新字串,查
'查Y字典得到的item值再轉化為數值的值(補0)
Next i
Sh2.[E2].Resize(UBound(Crr)) = Crr
'↑令結果表從[E2]開始範圍儲存格以Crr陣列值寫入
Set Y = Nothing: Erase Brr, Crr
'↑令釋放變數
End Sub |
|