Board logo

標題: [發問] 多欄位的資料如何存入陣列 [打印本頁]

作者: jesscc    時間: 2011-5-22 21:11     標題: 多欄位的資料如何存入陣列

要將B欄到E欄的資料存入陣列,因為只有四欄,所以我用前輩教的方式:

ar = Array("B", "C", "D","E")
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
ReDim Preserve Ay(s) '將資料存入陣列
Ay(s) = Array(.Cells(i, ar(0)).Value, .Cells(i, ar(1)).Value, .Cells(i, ar(2)).Value, .Cells(i, ar(3)).Value)
s = s + 1

這樣就可以存入陣列了,可是如果有20多欄的資料要存,很顯然這種方式會很累,不知該如何做才好。
還有當資料都移轉完了以後,有一些非連續性儲存格的資料想要把它刪除,如:

With Sheet1
'.[C1].ClearContents
'.[D4].ClearContents
'.[G10].ClearContents
'.[N4:N6].ClearContents
'.[B11:AU12].ClearContents
End With

有沒有辦法用陣列的方式簡化上面的程式碼?
作者: Hsieh    時間: 2011-5-22 21:42

本帖最後由 Hsieh 於 2011-5-22 21:45 編輯

範圍存成二維陣列
ay = Range([B2], Cells(Rows.Count, 2).End(xlUp).Offset(, 19))Value

不連續儲存格清除
[C1,D4,G10,N4:N6,B11:AU12].ClearContents
作者: jesscc    時間: 2011-5-23 20:45

謝謝 Hsieh 大大
Range([B2], Cells(Rows.Count, 2))
這一段著實看不懂,感覺好抽象,觀念中一個 Range 是由一個"欄" + 一個"列"組合而成,上面這一段卻是由兩組組合而成的,這是什麼意思,可以教導一下晚輩嗎?
作者: GBKEE    時間: 2011-5-23 21:02

VBA的說明
expression.Range(Cell1, Cell2)
expression     必選。該運算式或會傳回上述其中一個物件。
Cell1     必選的 Variant。範圍名稱。這必須是 A1 樣式參照的巨集語言。該名稱中可包括範圍運算子 (冒號)、交集運算子 (空白) 或聯集運算子 (逗號)。也可包括貨幣符號,但這些符號已被忽略。您可以在範圍中的任一部份使用區域定義名稱。如果使用名稱,則假設該名稱使用的是巨集語言。
Cell2     選擇性的 Variant。範圍左上角和右下角的儲存格。每一參數可為包含單個儲存格 (或者整列或整欄) 的 Range 物件,或者為使用巨集語言為單個儲存格命名的字串。
作者: jesscc    時間: 2011-5-23 22:00

GBKEE大大好
事實上,我也常常會去找說明檔,可是真正能點開的說明連結,好像沒幾個,覺得很奇怪。

ay = Range([B2], Cells(Rows.Count, 2).End(xlUp).Offset(, 19))Value
因此這句的意思就是,從B欄的B2到最後一筆資料,是這個陣列的頭部,然後向右19欄擴展。假設是B2到B6,那麼這個陣列就會存進5x20個 Cells 的資料,我這樣的理解正確嗎?
作者: GBKEE    時間: 2011-5-24 06:14

回復 5# jesscc
沒錯,
請注意陣列的元素是直接從工作表取得的.陣列的任一維最小可使用的陣列索引是從1開始.
如:ay = Range([B2], Cells(Rows.Count, 2).End(xlUp).Offset(, 19))Value
ay(1,1)=>[b2]  而不是  ay(0,0)=>[b2].
作者: jesscc    時間: 2011-5-24 19:29

謝謝 Hsieh 大和 GBKEE 大的解說!




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