返回列表 上一主題 發帖

[發問]將兩陣列依順序合併問題

回復 1# asus103
  1. Sub merge_rank()
  2. Dim myobject As Object
  3. Dim myrange As Range
  4. Dim i As Integer

  5. Set myobject = CreateObject("scripting.dictionary")

  6. For i = 1 To 2
  7. With Worksheets("sheet" & i)
  8. For Each myrange In .Range(.[a1], .[a1].End(xlToRight))
  9. myobject(myrange.Value) = myrange.Offset(1).Value
  10. Next
  11. End With
  12. Next

  13. With Sheet3
  14. For i = 1 To myobject.Count
  15. .Cells(1, i).Value = Application.Small(myobject.keys, i)
  16. .Cells(2, i).Value = myobject.Item(Application.Small(myobject.keys, i))
  17. Next
  18. End With

  19. Set myobject = Nothing

  20. End Sub
複製代碼
80 字節以內
不支持自定義 Discuz! 代碼

TOP

[版主管理留言]
  • Hsieh(2011-1-14 20:32): 先提出你的解決方式,再解開權限

回復 14# Hsieh
下載不到
80 字節以內
不支持自定義 Discuz! 代碼

TOP

[版主管理留言]
  • Hsieh(2011-1-15 11:59): 已開放下載,程式碼也顯示了 參考看看 多謝參與討論

回復 14# Hsieh
  1. Sub merge_rank()
  2. Dim myobject As Object, myobject2 As Object
  3. Dim myrange As Range
  4. Dim i As Integer, j As Integer

  5. Set myobject = CreateObject("scripting.dictionary")
  6. Set myobject2 = CreateObject("scripting.dictionary")

  7. With Sheet4
  8. For Each myrange In .Range(.[a1], .[a1].End(xlToRight))
  9. myobject(myrange.Value) = myobject(myrange.Value) + 1      'myrange.value為第1 row某數字,myobject作為計數器
  10. myobject2(myrange.Value & "," & myobject(myrange.Value)) = myrange.Offset(1).Value  myobject2輸入第2 row的數字(index為myrange.Value & "," & myobject(myrange.Value,即數字及其出現次數)
  11. Next
  12. End With

  13. With Sheet5
  14. .Activate
  15. .Range("a1").Activate
  16. For i = 1 To myobject.Count   '先數有多少筆不同的資料
  17. For j = 1 To myobject(Application.Small(myobject.keys, i))       '先排列,再找出其出現次數
  18. ActiveCell.Value = Application.Small(myobject.keys, i)            
  19. ActiveCell.Offset(1, 0).Value = myobject2(Application.Small(myobject.keys, i) & "," & j)
  20. ActiveCell.Offset(0, 1).Select
  21. Next
  22. Next
  23. End With

  24. Set myobject = Nothing
  25. Set myobject2 = Nothing

  26. End Sub
複製代碼
80 字節以內
不支持自定義 Discuz! 代碼

TOP

本帖最後由 FAlonso 於 2011-1-15 14:13 編輯

看第20頁,那個是最終程式
80 字節以內
不支持自定義 Discuz! 代碼

TOP

  1. Sub merge_rank2()
  2. Dim myobject As Object, myobject2 As Object
  3. Dim myrange As Range
  4. Dim i As Integer, j As Integer, k As Integer, myrow As Integer
  5. Dim mykey

  6. Set myobject = CreateObject("scripting.dictionary")
  7. Set myobject2 = CreateObject("scripting.dictionary")

  8. myrow = Sheet4.Range("A65536").End(xlUp).Row

  9. With Sheet4
  10. For Each myrange In .Range(.[a1], .[a1].End(xlToRight))
  11. myobject(myrange.Value) = myobject(myrange.Value) + 1
  12. For j = 2 To myrow
  13. myobject2(myrange.Value & "," & myobject(myrange.Value) & "," & j) = myrange.Offset(j - 1).Value
  14. Next
  15. Next
  16. End With

  17. With Sheet5
  18. .Activate
  19. .Range("a1").Activate
  20. For i = 1 To myobject.Count
  21. For j = 1 To myobject(Application.Small(myobject.keys, i))
  22. ActiveCell.Value = Application.Small(myobject.keys, i)
  23. For k = 2 To myrow
  24. ActiveCell.Offset(k - 1, 0).Value = myobject2(Application.Small(myobject.keys, i) & "," & j & "," & k)
  25. Next
  26. ActiveCell.Offset(0, 1).Select
  27. Next
  28. Next
  29. End With

  30. Set myobject = Nothing
  31. Set myobject2 = Nothing

  32. End Sub
複製代碼
這個是優化程式,第一行重覆也可使用
我到此為止了.....
80 字節以內
不支持自定義 Discuz! 代碼

TOP

        靜思自在 : 愛不是要求對方,而是要由自身的付出。
返回列表 上一主題