Board logo

標題: VBA刪除陣列元素 [打印本頁]

作者: alanfengjkl    時間: 2014-11-4 11:15     標題: VBA刪除陣列元素

1.由於EXCEL的表單有格子限制(104萬行)
所以如果在處理BIG DATA是否要把DATA傳入陣列呢??

2.如果要傳入陣列
那麼假設中間有個元素我不要 要怎麼剃除,讓後面的元素補上來?
假設是
Sub d()
Dim a
a = Array(1, 2, 3, 4, 5)
End Sub
如果3我不要 要怎麼剃除 讓後面補上 並且使陣列變小? 2維又是怎麼做?
作者: luhpro    時間: 2014-11-4 23:19

1.由於EXCEL的表單有格子限制(104萬行)
所以如果在處理BIG DATA是否要把DATA傳入陣列呢??

2.如果要傳入 ...
alanfengjkl 發表於 2014-11-4 11:15

Sub d()
Dim a, i, s
a = Array(1, 2, 3, 4, 5)
s = UBound(a) - 1
For i = 2 To s
  a(i) = a(i + 1)
Next
ReDim Preserve a(s)
End Sub

多維陣列 的 列舉式賦值 我有看過這樣的:
Sub a()
Dim a, i, j, s1, s2
a = [{"a", 1, 2, 9; "b", 1, 3, 2; "c", 1, 4, 0; "d", 6, 7, 7; "e", 6, 7, 4}]

s1 = UBound(a, 2)
s2 = UBound(a, 1)

For j = 1 To s2
For i = 3 To s1 - 1
a(j, i) = a(j, i + 1)
Next
Next
ReDim Preserve a(s2, s1 - 1) ' 這行會發生錯誤
End Sub
但是增減維數會發生錯誤,
我還沒試出來該怎麼做.
作者: kimbal    時間: 2014-11-5 00:52

本帖最後由 kimbal 於 2014-11-5 08:36 編輯

Redim 不能縮少, 但可以在想刪除時,另行建個新的,
把想保留的抄到新陣列.

其實如果數據太多,可以考慮用 Powerpivot, Access, 或免費的MS SQL EXPRESS / MYSQL
如果是>104萬行, 建一次陣列都要用上大量時間(數小時),也很傷內存
Access比較像Excel, 推廌初學者使用.
Powerpivot 可以放bigdata,但沒有VBA配合比較煩
作者: alanfengjkl    時間: 2014-11-5 19:43

回復 3# kimbal


    我是會想用SQL server先處理資料
然後再讀到vba裡面進行運算或處理 這樣會超慢?




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