返回列表 上一主題 發帖

[發問] 二維陣列的排序問題?

回復 1# wsx24680


   不知是不是這個意思
  1. Sub Ex_1() 'Sheet2跟Sheet3相加
  2. Dim A As Range
  3. Set d = CreateObject("Scripting.Dictionary")
  4. d("Item") = Array("ITEM", "NO.", "COUNT")
  5. For Each Sh In Sheets(Array("Sheet2", "Sheet3"))
  6. With Sh
  7. For Each A In .Range(.[A2], .[A65536].End(xlUp))
  8.   If IsEmpty(d(A & A.Offset(, 1))) Then
  9.      d(A & A.Offset(, 1)) = Array(A, A.Offset(, 1), A.Offset(, 2))
  10.      Else
  11.      ar = d(A & A.Offset(, 1))
  12.      ar(2) = ar(2) + A.Offset(, 2)
  13.      d(A & A.Offset(, 1)) = ar
  14.   End If
  15. Next
  16. End With
  17. Next
  18. With Sheet3.[F1].Resize(d.Count, 3)
  19. .Value = Application.Transpose(Application.Transpose(d.items))
  20. .Sort key1:=.Cells(1, 1), Header:=xlYes
  21. End With
  22. End Sub


  23. Sub Ex_2() 'Sheet1計數
  24. Dim A As Range
  25. Set d = CreateObject("Scripting.Dictionary")
  26. With Sheet1
  27. d("Item") = Array("ITEM", "NO.", "COUNT")
  28. For Each A In .Range(.[A2], .[A65536].End(xlUp))
  29.   If IsEmpty(d(A & A.Offset(, 1))) Then
  30.      d(A & A.Offset(, 1)) = Array(A, A.Offset(, 1), 1)
  31.      Else
  32.      ar = d(A & A.Offset(, 1))
  33.      ar(2) = ar(2) + 1
  34.      d(A & A.Offset(, 1)) = ar
  35.   End If
  36. Next
  37. End With
  38. With Sheet1.[F1].Resize(d.Count, 3)
  39. .Value = Application.Transpose(Application.Transpose(d.items))
  40. .Sort key1:=.Cells(1, 1), key2:=.Cells(1, 2), Header:=xlYes
  41. End With
  42. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 3# wsx24680


    如果結果是你要的
試試樞紐分析及資料彙總功能
學海無涯_不恥下問

TOP

回復 6# wsx24680
  1. Sub Ex_1() 'Sheet2跟Sheet3相加
  2. Dim A As Range, Ay()
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Set d1 = CreateObject("Scripting.Dictionary")

  5. For Each Sh In Sheets(Array("Sheet2", "Sheet3"))
  6. With Sh
  7. For Each A In .Range(.[A2], .[A65536].End(xlUp))
  8.   If IsEmpty(d(A & A.Offset(, 1))) Then
  9.      d(A & A.Offset(, 1)) = Array(A, A.Offset(, 1), A.Offset(, 2))
  10.      d1(A.Value) = ""
  11.      Else
  12.      ar = d(A & A.Offset(, 1))
  13.      ar(2) = ar(2) + A.Offset(, 2)
  14.      d(A & A.Offset(, 1)) = ar
  15.   End If
  16. Next
  17. End With
  18. Next
  19. With Sheet3
  20. .Columns("F:H") = ""
  21. Set A = .[F1]
  22. For Each ky In d1.keys
  23.    For Each key1 In d.keys
  24.       If d(key1)(0) = ky Then
  25.       ReDim Preserve Ay(s)
  26.       Ay(s) = d(key1)
  27.       s = s + 1
  28.       End If
  29.     Next
  30. With A.Resize(s, 3)
  31. .Value = Application.Transpose(Application.Transpose(Ay))
  32. .Sort key1:=.Cells(1, 2), header:=xlNo
  33. End With
  34. Erase Ay: s = 0: Set A = .[F65536].End(xlUp).Offset(1, 0)
  35. Next
  36. End With
  37. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 9# wsx24680


    ar(2) = A.Offset(, 2) + "+" + ar(2)
因為你市要字串連結
應為ar(2) = A.Offset(, 2) & "+" & ar(2)
學海無涯_不恥下問

TOP

        靜思自在 : 有時當思無時苦,好天要積雨來糧。
返回列表 上一主題