- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
9#
發表於 2023-10-26 13:44
| 只看該作者
回復 5# Andy2483
謝謝論壇,謝謝各位前輩,以下是複習的心得註解
Sub TEST()
Dim Brr, Crr, Z, i&, j%, V%, V7%
'↑宣告變數:(Brr,Crr,Z)是通用型變數,i是長整數,(j,V,V7)是短整數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z這通用型變數是 字典
With Sheets("說明"): Brr = Range(.Cells(.UsedRange.Rows.Count, "A"), .[IV1].End(xlToLeft)): End With
'↑關於 "說明"工作表的程序:
'令Brr這通用型變數是 二維陣列,以第1列最左邊有內容儲存格到 A欄已使用列(最大列號)儲存格,
'以這範圍儲存格值帶入Brr陣列中
For j = 1 To UBound(Brr, 2)
'↑設順迴圈!令j變數從1 到Brr陣列最大索引欄號
If Left(Trim(Brr(1, j)), 6) <> "" Then Z(Left(Trim(Brr(1, j)), 6)) = j
'↑如果第1列j迴圈欄Brr陣列值去除頭尾空白字元後 取左側6字元的新字串不是空字元!
'就令以 第1列j迴圈欄Brr陣列值去除頭尾空白字元後 取左側6字元的新字串當key,
'j變數當item納入Z字典中
Next
Crr = Range([WIP!O1], [WIP!A65536].End(3))
'↑令Crr這通用型變數是 二維陣列,以[O1]儲存格到 A欄最後有內容儲存格,
'以這範圍儲存格值帶入Crr陣列中
For i = 2 To UBound(Crr)
'↑設順迴圈!令i變數從2 到Brr陣列最大索引列號
V = Val(Crr(i, 15)): V7 = Val(Crr(i, 7)): Crr(i - 1, 1) = ""
'↑令V這短整數變數是 i迴圈列15欄Crr陣列值轉化的數值
'↑令V7這短整數變數是 i迴圈列7欄Crr陣列值轉化的數值
'↑令(i-1)迴圈列1欄Crr陣列值是空字元
If Z.Exists(Left(Trim(Crr(i, 1)), 6)) <> Empty Then
'↑如果以第1列j迴圈欄Crr陣列值去除頭尾空白字元後 取左側6字元的新字串(以下稱產品編號),
'若以產品編號查到Z字典有此key!
Crr(i - 1, 1) = Round(Brr(V7 + 2, Z(Left(Trim(Crr(i, 1)), 6))) * V, 0)
'↑令(i-1)列1欄Crr陣列值是 (V7變數+2列,產品編號查字典回傳item值欄)Brr陣列值,
'再乘以V變數後,該值小數1位四捨五入到整數
ElseIf Right(Left(Trim(Crr(i, 1)), 7), 1) = "W" Then
'↑否則如果以 第1列j迴圈欄Crr陣列值去除頭尾空白字元後 取第7字元是"W"!
Crr(i - 1, 1) = Round(Brr(V7 + 2, Z("W")) * V, 0)
'↑令(i-1)列1欄Crr陣列值是 (V7變數+2列,"W"查字典回傳item值欄)Brr陣列值,
'再乘以V變數後,該值小數1位四捨五入到整數
Else
Crr(i - 1, 1) = Round(Brr(V7 + 2, Z(Trim(Split(Crr(i, 2), "X")(0) & """"))) * V, 0)
'↑令(i-1)列1欄Crr陣列值是 (V7變數+2列,批號第1規格碼查字典回傳item值欄)Brr陣列值,
'再乘以V變數後,該值小數1位四捨五入到整數
'註 批號第1規格碼: i迴圈列第2欄Crr陣列值,以"X"分割成的一維陣列的第0索引號陣列值 連接 "符號
End If
Next
[WIP!D2].Resize(UBound(Crr) - 1, 1) = Crr
'↑令"WIP"工作表[D2]向下擴展Crr縱向最大索引列號-1列,此範圍儲存格值以Crr陣列值帶入
Set Z = Nothing: Erase Brr, Crr
'↑令釋放變數
End Sub |
|