返回列表 上一主題 發帖

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

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

各位大大您們好
如果想將兩陣列依由小而大順序合併問題
如:
A  8 4 6               B 7 5 3 9                C 3 4 5 6 7 8 9
    3 4 5                  4 2 1 3                   1 4 2 5 4 3 3
將A,B兩陣列合併成C陣列,並將其餘相對應資料抄錄,
應該如何解決

感謝各位的協助
ASUS

回復 1# asus103
有些數值跟你A、B陣列取得方式有關
以儲存格範圍為陣列為例
  1. Sub nn()
  2. Dim Ar(), Ay(), C(), A, B
  3. A = [B1:D2]: B = [F1:I2]
  4. For i = LBound(A, 1) To UBound(A, 1)
  5.    For j = LBound(A, 2) To UBound(A, 2)
  6.    ReDim Preserve Ar(s)
  7.    Ar(s) = A(i, j) '取得A陣列
  8.    s = s + 1
  9.    Next
  10.    For j = LBound(B, 2) To UBound(B, 2)
  11.    ReDim Preserve Ar(s)
  12.    Ar(s) = B(i, j) '取得B陣列
  13.    s = s + 1
  14.    Next
  15.    ReDim Ay(s)
  16.    For j = 0 To UBound(Ar)
  17.      Ay(j) = Application.Small(Ar, j + 1) '排序
  18.    Next
  19.    ReDim Preserve C(k)
  20.    C(k) = Ay: s = 0: Erase Ay '加入資料到C陣列,把暫存陣列清除
  21.    k = k + 1
  22. Next
  23. [K1].Resize(k, UBound(A, 2) + UBound(B, 2)) = Application.Transpose(Application.Transpose(C))
  24. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 2# Hsieh

Hsieh大大您好

我這次的重點落在『並將其餘相對應資料抄錄』,也就是第2維資料要跟著原來第1維資料

原先已有了兩個陣列(A、B)合併成C之後,第1維按由小而大順序,第2維須跟著原來的第1維
例如:
A陣列是A班的成績、姓名,B陣列是B班的成績、姓名
想要按照成績高低合併成新陣列,但成績須對到原來的人

感謝大大的回覆,
由其中我要學到處理工作表資料與陣列間的不同方式和想法
ASUS

TOP

回復 3# asus103

不懂你所謂
並將其餘相對應資料抄錄
請上傳你的範例說明
學海無涯_不恥下問

TOP

回復 4# Hsieh
Hsieh大大您好
對不起,是我辭不達意
附上範例檔
感謝您
Book1.rar (12.24 KB)
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

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

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

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

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

        靜思自在 : 忘功不忘過,忘怨不忘恩。
返回列表 上一主題