Board logo

標題: [發問] 組合多個數組 [打印本頁]

作者: storylai    時間: 2010-10-29 12:46     標題: [發問] 組合多個數組

最近須將大量的單據的資料讀入,
同一檔 31 張分頁,每頁有三個或以上不同的「位置」儲存數據。

我採用如下方法,每一分頁先存成不同數組,
再逐一分析轉換,然後再寫入儲存。

如下例子中,我要寫三個迴圈分析,
    r1 = Range("D5:N18")
    r2 = Range("D35:N48")
    r3 = Range("D65:N83")

問題:應如何將 r1 、r2 、r3 組合成「新數組 r0」 中?
作者: Hsieh    時間: 2010-10-29 18:11

回復 1# storylai


    不知道你整體流程為何?
如果單純把3個陣列用一個陣列表示
   r1 = Range("D5:N18")
    r2 = Range("D35:N48")
    r3 = Range("D65:N83")
    r0=Array(r1,r2,r,3)
作者: storylai    時間: 2010-10-30 11:02

謝謝回覆,

工作是這樣的,r1 r2 r3 都是一些單據內容。

同事每天列印給主管簽,r1 r2 間會有一些沒用的「格式文字」。

由於要覆核他們,我要將這些資料抄到另一個 workbook 中分析,看看
有沒有重覆、漏報等。

目前的做法是先逐一抄 r1 r2 r3 等到我的  workbook  中,然後再逐一分析。

自己想進階,利用 array 組合、分析,再抄入自已的  workbook  中。

能力所限,無法將三佪 r1 r2 r3 合成一個,變成無法統一分折。

我是想,31頁的 r1 r2 r3 先合成一個 array ,然後統一抄入  workbook  的一張 sheet 中,再寫些條件
分析 array,做好就抄入另一張 sheet 中。

先謝謝了。
作者: Hsieh    時間: 2010-10-30 11:12

本帖最後由 Hsieh 於 2010-10-30 11:34 編輯

回復 3# storylai
以你的構思要將數個二維陣列合併成一個陣列
那麼此新的陣列可就成了三維陣列
那麼你要再寫入工作表時無法一次寫入
所以建議你將不同區域直接寫成一個二維陣列
在讀取時才會簡便
  1. Sub nn()
  2. Dim Ar(), Ay As Variant, Rng As Range, s%
  3. Set Rng = Union(Range("D5:N18"), Range("D35:N48"), Range("D65:N83"))
  4. For i = 1 To Rng.Areas.Count
  5.    For j = 1 To Rng.Areas(i).Rows.Count
  6.      ReDim Preserve Ar(s)
  7.      Ar(s) = Rng.Areas(i).Rows(j)
  8.      s = s + 1
  9.    Next
  10. Next
  11. Ay = Application.Transpose(Application.Transpose(Ar))
  12. Sheet2.[A1].Resize(UBound(Ay, 1), UBound(Ay, 2)) = Ay
  13. End Sub
複製代碼

作者: oobird    時間: 2010-10-30 20:20

對於取固定區域或許可以想單純些:
Sub nn()
Dim Rng As Range
Set Rng = Union(Range("D5:N18"), Range("D35:N48"), Range("D65:N83"))
Rng.Copy Sheet2.[a1]
End Sub
作者: GBKEE    時間: 2010-10-31 09:55

回復 5# oobird
oobird版主此程序可行的
但你沒說清楚必要的條件是.所有範圍的第一欄為必須是同一欄位,且每一個範圍的總欄位數是要一樣的.
作者: storylai    時間: 2010-11-1 22:20

謝謝回覆。

1- 我現時用的方法與 oobird 大大的差不多。
    都是抄一份再整埋。
    只是想試著用 array 的方法來增進功力。

2- 要處理的資料都是相同欄位的,只是製作的
    同事不懂而搞複雜了。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)