返回列表 上一主題 發帖

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

本帖最後由 Hsieh 於 2011-1-15 11:58 編輯

回復 13# FAlonso
若考慮索引值會重複的情形(第一列相同,但第二列對應值不同)
如圖的資料
您會如何解決?
Array_Sort.zip (10.21 KB)
  1. Sub Dic_Sort()
  2. Dim C()
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Set d1 = CreateObject("Scripting.Dictionary")
  5. A = Sheets(1).[A1:J2]: B = Sheets(2).[A1:J2]
  6. For Each y In Array(A, B)
  7.    For i = LBound(y, 2) To UBound(y, 2)
  8.      d(y(1, i) + d1(y(1, i)) * 0.1) = Array(y(1, i), y(2, i))
  9.      d1(y(1, i)) = d1(y(1, i)) + 1
  10.    Next
  11. Next
  12. Do Until d.Count = 0
  13.    ky = Application.Small(d.keys, 1)
  14.    ReDim Preserve C(s)
  15.    C(s) = d(ky)
  16.    s = s + 1
  17.    d.Remove ky
  18. Loop
  19. Sheets(3).[A1].Resize(2, s) = Application.Transpose(C)
  20. Set d = Nothing
  21. Set d1 = Nothing
  22. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 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

回復 10# Hsieh
感謝您Hsieh大大

非常感激您的協助
我想我大概需要花一段時間來消化最近您教的東西

謝謝您
ASUS

TOP

[版主管理留言]
  • Hsieh(2011-1-13 23:15): 10#已標示註解

Hsieh大大您好
對不起,我看不大懂
可以麻煩您解釋一下嗎?

我如果要用到我的程式中
是不是要插入1、3、5行呢?
第1行是否一定得在整個模組的最上方呢?
ASUS

TOP

本帖最後由 Hsieh 於 2011-1-13 22:26 編輯

回復 9# asus103
一般模組
  1. Declare Sub Sleep Lib "kernel32" (ByVal dwmilliseconds As Long) '宣告API的SLEEP函數
  2. Sub nn()
  3. t = Timer '開始計時
  4. For i = 1 To 10
  5.   Sleep 500  '延遲500/1000秒
  6. Next
  7. MsgBox "延遲" & Timer - t & "秒"  "每次延遲0.5秒,十次延遲後共延遲?秒
  8. End Sub
複製代碼
學海無涯_不恥下問

TOP

本帖最後由 asus103 於 2011-1-13 20:34 編輯

回復 8# Hsieh
感謝您Hsieh大大
又提供我另一個思考方式

可以另外再請教您有關"Delay"的用法嗎?
VBA說明我看不甚懂
不知道如何控制延遲時間,
如果在一回圈中每一次延遲0.5秒,其語法為何
謝謝
ASUS

TOP

本帖最後由 Hsieh 於 2011-1-13 18:45 編輯

回復 7# asus103
  1. Sub yy() '氣泡排序
  2. Dim Ar(), Ay()
  3. A = [B1:D2]: B = [F1:I2]
  4. For Each y In Array(A, B)
  5. For i = LBound(y, 2) To UBound(y, 2)
  6. ReDim Preserve Ar(s)
  7. ReDim Preserve Ay(s)
  8.   Ar(s) = y(1, i)
  9.   Ay(s) = y(2, i)
  10.   s = s + 1
  11. Next
  12. Next
  13. For i = 0 To UBound(Ar)
  14.     For j = 0 To UBound(Ar) - 1
  15.        If Ar(j + 1) < Ar(j) Then '遞增
  16.      'If Ar(j + 1) > Ar(j) Then  '遞減
  17.       temp = Ar(j)
  18.       temp1 = Ay(j)
  19.       Ar(j) = Ar(j + 1)
  20.       Ar(j + 1) = temp
  21.       Ay(j) = Ay(j + 1)
  22.       Ay(j + 1) = temp1
  23.       
  24.     End If
  25.     Next
  26. Next
  27. [B15].Resize(, s) = Ar
  28. [B16].Resize(, s) = Ay
  29. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 6# Hsieh
感謝您Hsieh大大
我測試過了winxp、office2007能正常工作
跟文字檔間的互動是我之前比較少碰,但正好是我自己規劃下一階段的學習目標
我需要多花一點時間去研究他,若有問題再向您請教
感謝您
ASUS

TOP

本帖最後由 Hsieh 於 2011-1-13 22:28 編輯

回復 5# asus103
  1. Sub ex()
  2. Dim C()
  3. Open "test.txt" For Output As #1 '產生暫存檔
  4. A = [B1:D2]: B = [F1:I2]
  5. For i = LBound(A, 2) To UBound(A, 2)
  6. Print #1, A(1, i) & "," & A(2, i)
  7. Next
  8. For i = LBound(B, 2) To UBound(B, 2)
  9. Print #1, B(1, i) & "," & B(2, i)
  10. Next
  11. Close #1
  12. Shell "sort / " & "test.txt" & " /o " & "temp.txt" '產生排序暫存檔
  13. '偵測直到檔案產生,再繼續後面的動作
  14. While Dir("temp.txt") = ""
  15. Wend
  16. Open "temp.txt" For Input As #1
  17. Do Until EOF(1)
  18. Line Input #1, mystr
  19. ReDim Preserve C(s)
  20. C(s) = Split(mystr, ",")
  21. s = s + 1
  22. Loop
  23. Close #1
  24. Kill "test.txt" '刪除暫存檔
  25. Kill "temp.txt" '刪除排序暫存檔
  26. [B12].Resize(2, s) = Application.Transpose(C)
  27. End Sub
複製代碼
sort指令是Windows原本就有的DOS指令,用於排序純文字檔。
以上程式通過Windows7+Excel2010測試;
若在你的電腦執行有誤,請確認你的電腦裡有 sort.exe 這個執行檔。
學海無涯_不恥下問

TOP

回復 4# Hsieh
Hsieh大大您好
對不起,是我辭不達意
附上範例檔
感謝您
Book1.rar (12.24 KB)
ASUS

TOP

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