返回列表 上一主題 發帖

[發問] 重複內容時間加總並刪除重複保留唯一值

回復 1# v03586


    謝謝前輩發表此主題與範例,謝謝各位前輩,謝謝論壇
後學藉此帖練習陣列與字典,學習的解決方案如下,請前輩參考
請各位前輩指教

執行前:


執行結果:



Option Explicit
Sub TEST_2()
Dim Brr, Y, T$, C%, j%, i&, xA As Range
'↑宣告變數:(Brr,Y)是通用型變數,T是字串變數,
'(C,j)是短整數,i是長整數,xA是儲存格變數

Set Y = CreateObject("Scripting.Dictionary")
'↑令Y這通用型變數是 字典
Set xA = Range([M1], Cells(Rows.Count, 1).End(3)): Brr = xA
'↑令xA這儲存格變數是 [M1]擴展到A欄最後有內容儲存格
'令Brr這通用型變數是 二維陣列,以xA變數(儲存格值)帶入

C = UBound(Brr, 2)
'↑令C這短整數變數是 Brr陣列橫向最大索引欄號
For i = 2 To UBound(Brr)
'↑設順迴圈!i從2到 Brr陣列縱向最大索引列號
   T = Brr(i, 9) & "|" & Brr(i, 10)
   '↑令T這字串變數是 i迴圈列第9欄Brr陣列值 連接 "|",
   '再連接 i迴圈列第10欄Brr陣列值,所組成的新字串

   If Y(T) = "" Then
   '↑如果T變數查Y字典的item值是空字元?
   '(這問句已經將 T變數當key,item是空字元,納入Y字典了,已增加個新key)

      Y(T) = Y.Count + 1
      '↑令 T變數當key,item是 Y字典key數量 + 1
      For j = 1 To C - 1: Brr(Y(T), j) = Brr(i, j): Next
      '↑設順迴圈!j從1到 C變數-1,陸續將該列各欄值帶入指定列同欄位置
      Brr(Y(T), 13) = Brr(Y(T), 12): GoTo i01
      '↑令(T變數查Y字典item值)列第13欄Brr陣列值是
      '(T變數查Y字典item值)列第12欄Brr陣列值
      '令程序跳到 i01標示位置繼續執行

   End If
   Brr(Y(T), 13) = Brr(Y(T), 13) + Brr(i, 12)
   '↑令(T變數查Y字典item值)列第13欄Brr陣列值是
   '自身值 + (T變數查Y字典item值)列第12欄Brr陣列值

i01: Next
ActiveSheet.UsedRange.Clear
'↑令有使用儲存格範圍做清除
xA.Resize(Y.Count + 1, C) = Brr
'↑令xA變數(儲存格)第1格擴展向下 Y字典key數量+1列,
'向右擴展C變數欄,這範圍儲存格值以Brr陣列值帶入

Set Y = Nothing: Set xA = Nothing: Erase Brr
'釋放變數
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 人要知福、惜福、再造福。
返回列表 上一主題