- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
26#
發表於 2023-3-27 10:07
| 只看該作者
本帖最後由 Andy2483 於 2023-3-27 10:11 編輯
回復 24# shuo1125
謝謝前輩
後學藉此帖發現這字典是個萬能的變數產生器
1.因為變數不會重複,所以key可以濾重複
2.因為key對應一個item(數字.字串.儲存格.陣列....),所以key可當成是一個變數
Option Explicit
Sub 資料區餘額_1()
Dim Y, Arr, T16&, T17&, T18&, i&, S&, T$, T2$, T3$, T20$, xR As Range
'↑宣告變數:(Y,Arr)是通用型變數,(T16,T17,T18,i)是長整數,
'(T,T2,T3,T20)是字串變數,xR是儲存格變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y這通用型變數是 字典
Set xR = Range([資料區!T2], [資料區!A1].Cells(Rows.Count, 1).End(3))
'↑令xR這儲存格變數是 資料區[T2]到 A欄最後有內容儲存格範圍儲存格
Arr = xR
'↑令Arr這通用型變數是 二維陣列,以 xR儲存格值帶入
For i = 1 To UBound(Arr)
'↑設順迴圈!i從1到 Arr陣列縱向最大索引列號
T2 = Arr(i, 2): T3 = Arr(i, 3): T16 = Arr(i, 16)
T17 = Arr(i, 17): T18 = Arr(i, 18): T20 = Arr(i, 20)
'↑令T2這字串變數是 i迴圈列第2欄Arr陣列值,依此類推
T18 = Abs(T16 - T17)
'↑令T18這長整數變數是 T16變數 - T17變數後的絕對值數值
T = T2 & "|" & T3
'↑令T這字串變數是 T2變數連接 T3變數組成的新字串
If Y(T) = "" And T20 = "沖帳" Then MsgBox "嚴重錯誤": Exit Sub
'↑如果一開始就是沖帳!是嚴重錯誤得資料
If T20 = "立帳" Then
'↑如果 T20變數是 "立帳" ?
Y(T) = Y(T) + T18
'↑令T變數在Y字典item值累加 T18變數
ElseIf T20 = "沖帳" Then
'↑否則如果 T20變數是 "沖帳" ?
Y(T) = Y(T) - T18
'↑令T變數在Y字典item值累扣 T18變數
Else
MsgBox "無法辨識": Application.Goto xR(i, 20): Exit Sub
'↑否則就跳出提示窗,儲存格游標跳到R欄i迴圈列位置:結束程式
End If
Arr(i, 18) = Y(T)
'↑令i迴圈列第18欄Arr陣列值是T變數查Y字典的item值
Next
[A2].Resize(UBound(Arr), UBound(Arr, 2)) = Arr
'↑令[A2]擴展向下Arr縱向最大索引列號數,擴展向右最大索引欄號數,
'這擴展範圍儲存格值以Arr陣列值帶入
Erase Arr: Set xR = Nothing: Set Y = Nothing
'↑令釋放變數
End Sub |
|