返回列表 上一主題 發帖

[發問] 刪除重複後,尋找重複客戶號碼加總值

回復 1# Changbanana

看起來你的索引KEY除了客戶編號之外,還須包括B欄的sell作為KEY值,才合乎你想呈現的結果吧?

TOP

本帖最後由 Kubi 於 2016-9-26 15:34 編輯

回復 3# Changbanana
可是編號10302包括大雄與小明,如何區別?

TOP

回復 5# Changbanana
試看看。
結果會寫在I:O欄
  1. Sub test()
  2.     Dim arr()
  3.     Dim dic As Object
  4.     Set dic = CreateObject("scripting.dictionary")
  5.     For i = 2 To Range("A65536").End(3).Row
  6.         If dic.Exists(Cells(i, 1).Value) Then
  7.             dic(Cells(i, 1).Value) = dic(Cells(i, 1).Value) + Cells(i, 5).Value
  8.         Else
  9.             dic(Cells(i, 1).Value) = Cells(i, 5).Value
  10.             n = n + 1
  11.             ReDim Preserve arr(1 To 7, 1 To n)
  12.             For j = 1 To 7
  13.                 arr(j, n) = Cells(i, j).Value
  14.             Next j
  15.         End If
  16.     Next i
  17.     For i = 1 To n: arr(5, i) = dic(arr(1, i)): Next i
  18.     Columns("I:O").ClearContents
  19.     [I1].Resize(1, 7) = [A1].Resize(1, 7).Value
  20.     [I2].Resize(n, 7) = Application.Transpose(arr)
  21. End Sub
複製代碼

TOP

回復 7# Changbanana
簡單來說就是從資料端擷取某列資料儲存於二維陣列(arr)中備用。
至於 ReDim 請參閱官方版說明(游標停在ReDim文字中後再按F1鍵),會比我解釋的更清楚。

TOP

回復 10# Changbanana

若不要求執行速度的話可用這個。
  1. Sub UseFind()
  2.     Dim cell As Range
  3.     Columns("I:O").ClearContents
  4.     [I1].Resize(1, 7) = [A1].Resize(1, 7).Value
  5.     er = 2
  6.     For i = 2 To Range("A65536").End(3).Row
  7.         Set cell = Columns(9).Find(Cells(i, 1).Value, lookat:=xlWhole)
  8.         If cell Is Nothing Then
  9.             Cells(er, 9).Resize(1, 7) = Cells(i, 1).Resize(1, 7).Value
  10.             er = er + 1
  11.         Else
  12.             Cells(cell.Row, 13).Value = Cells(cell.Row, 13).Value + Cells(i, 5).Value
  13.         End If
  14.     Next i
  15. End Sub
複製代碼

TOP

        靜思自在 : 能善用時間的人,必能掌握自己努力的方向。
返回列表 上一主題