Scripting.Dictionary的應用 02
- 帖子
- 1567
- 主題
- 40
- 精華
- 0
- 積分
- 1591
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2026-2-2
|
謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
資料表:
結果表執行前:
執行結果:
Option Explicit
Sub TEST_1()
Dim Brr, Crr, Z, A, i&, j%, R&, Y&, N&
Sheets("PL").UsedRange.ClearContents
Set Z = CreateObject("Scripting.Dictionary")
Brr = Range([Summary!E1], [Summary!A65536].End(3))
For i = 2 To UBound(Brr)
A = Replace(Brr(i, 5), "~", "-"): A = A & "-" & A
A = Split(A, "-")(0) & "-" & Split(A, "-")(1)
R = Abs(Evaluate(A))
For Y = 0 To R
If Z(Val(A) + Y) <> "" Then
MsgBox "箱號重複: " & Val(A) + Y & " 修正後再執行!"
Exit Sub
End If
Z(Val(A) + Y) = i & "*0+" & Val(Brr(i, 3)) & "/" & (R + 1)
Next
Next
ReDim Crr(1 To Z.Count + 1, 1 To 6)
For Each A In Z.keys
If N = 0 Then
N = 1: Crr(N, 6) = "Remark"
For j = 1 To 5: Crr(N, j) = Brr(1, j): Next
End If
N = N + 1
Crr(N, 1) = Brr(Val(Z(A)), 1)
Crr(N, 2) = Brr(Val(Z(A)), 2)
Crr(N, 3) = Evaluate(Z(A))
Crr(N, 4) = 1
Crr(N, 5) = A
Crr(N, 6) = Brr(Val(Z(A)), 5)
Next
With [PL!A1].Resize(Z.Count + 1, 6)
.Value = Crr
.Sort KEY1:=.Item(5), Order1:=1, Header:=1
End With
Set Z = Nothing: Erase Brr, Crr
End Sub |
|
|
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流
|
|
|
|
|
- 帖子
- 1567
- 主題
- 40
- 精華
- 0
- 積分
- 1591
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2026-2-2
|
本帖最後由 Andy2483 於 2023-7-6 14:06 編輯
回復 8# mdr0465
謝謝 mdr0465回復,謝謝一起學習
後學盡可能表達所學的心得,心得如下:
A = Split(A, "-")(0) & "-" & Split(A, "-")(1)
'這裡的(0)是指A字串以"-"符號分割成為一維陣列索引號
'以Split()分割字串後的一維陣列索引號從0開始
'Split()(0),Split()(1),Split()(2)...依此類推
'因為箱號 有單箱號(6,7),或區間箱號(2~5,9~10),所以用此法可一併處理
'這方法是學習自 准提部林前輩指導的下列連結帖,請參考
http://forum.twbts.com/viewthrea ... mp;page=1#pid121027
Sub TEST_2()
Dim A$, B$
A = "7"
B = "9-10"
B = B & "-" & B
MsgBox B
B = Split(B, "-")(0) & "-" & Split(B, "-")(1)
MsgBox B
MsgBox Abs(Evaluate(B))
A = A & "-" & A
MsgBox A
A = Split(A, "-")(0) & "-" & Split(A, "-")(1)
MsgBox A
MsgBox Abs(Evaluate(A))
End Sub
'==================================
補充:
如果將A,B變數設為通用型變數,就可以讓字串與一維陣列都可以被裝盛
Sub TEST_3()
Dim A, B
A = "7"
B = "9-10"
B = B & "-" & B
MsgBox B
B = Split(B, "-")
B = B(0) & "-" & B(1)
MsgBox B
MsgBox Abs(Evaluate(B))
A = A & "-" & A
MsgBox A
A = Split(A, "-")
A = A(0) & "-" & A(1)
MsgBox A
MsgBox Abs(Evaluate(A))
End Sub
至於怎麼運用? 建議多練習各種範例情境
建議前輩多上論壇發表看法.心得...做交流,達到 高中生等級,可搜尋內文,有超多的範例知識可學習與練習
|
|
|
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流
|
|
|
|
|