返回列表 上一主題 發帖

Scripting.Dictionary的應用 02

謝謝論壇,謝謝各位前輩

後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教

資料表:


結果表執行前:


執行結果:



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
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 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

至於怎麼運用? 建議多練習各種範例情境
建議前輩多上論壇發表看法.心得...做交流,達到 高中生等級,可搜尋內文,有超多的範例知識可學習與練習

用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 為人處世要小心細心,但不要「小心眼」。
返回列表 上一主題