返回列表 上一主題 發帖

判斷式出現0,多餘的空白

回復 2# 准提部林


    謝謝論壇,謝謝前輩
後學藉此帖練習陣列與字典,學習方案如下,請前輩再指導

執行前:


執行結果:



Option Explicit
Sub TEST_1()
Dim Brr, Y, A, i&, j%, Ta$, Tb$, Td$, TT$
'↑宣告變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是字典
Brr = Range([F1], [A65536].End(3))
'↑令變數是二維陣列並以儲存格值倒入
A = Array(, 1, 2, 4, 6)
'↑設個一維陣列讓後續的結果迴圈抓取指定欄位
For i = 1 To UBound(Brr)
'↑設順迴圈
   Ta = Brr(i, 1): Tb = Brr(i, 2): Td = Brr(i, 4): TT = Ta & "|" & Tb
   If Y(TT) = "" Then
   '↑這疑問句已經不知不覺將 key是TT變數,item是"" ,納入在Y字典中了
      Y(TT) = Y.Count
      '↑索性就依當下key的數量當變數紀錄此key在陣列中的索引列號
      For j = 1 To 4: Brr(Y.Count, j) = Brr(i, A(j)): Next: GoTo i01
      '↑因為是首次納入此key,所以將各欄位值帶入指定位置,覆蓋舊陣列值,
      '↑以上就已經處理了首次值,不必累加數量,所以跳到i01指定位置繼續執行

   End If
   Brr(Y(TT), 4) = Brr(Y(TT), 4) + Brr(i, 6)
   '↑如果程序能跑到這裡,代表不是首次,將該key所帶的item調出來(索引列號),
   '讓數量做累加

   If InStr(" " & Brr(Y(TT), 3) & " ", " " & Td & " ") = 0 Then
      Brr(Y(TT), 3) = Trim(Brr(Y(TT), 3) & " " & Td)
   End If
   '↑將不重複工作人員納入
i01: Next
[L:O].ClearContents
'↑清除結果儲存格舊資料
If Y.Count > 1 Then [L1].Resize(Y.Count, 4) = Brr
'↑如果字典裡keys數>1!就從[L1]開始貼入Brr陣列局部值
Set Y = Nothing: Erase Brr
'↑釋放變數
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 要用心,不要操心、煩心。
返回列表 上一主題