作者waiter337 (給開司一罐蘇格登)
看板Visual_Basic
標題[VBA ] 陣列貼上excel的方式(回樓上)
時間Fri Jan 27 11:35:03 2017
這套方式也算拼拼湊湊出來
可能會有些微不正確
但如對於新手或許是個比較快速的一個範例
因為寫陣列不難,但要把陣列貼上cell 實在很難>.<
以下為陣列貼上工作表儲存格cell之辦法
1.
(1維陣列,所有列貼上某起始格,自動調整大小,cell為向下匯入)
Sheets("sheet1").[A1].Resize(UBound(陣列名)) =Application.Transpose(陣列名)
此種轉置貼上有65536筆上限
假設陣列內的資料是
1
3
5
顯示為
1
3
5
2.
(1維陣列,從某起始格,朝向右邊貼上,自動調整大小,cell為向右匯入)
Sheets("工作表1").[A1].Resize(1,UBound(陣列名,1) +1) = 陣列名
假設陣列內的資料是
1
3
5
顯示為
1 3 5
3.
(2維陣列,欄為不固定) #陣列設為0~最後一欄,將相同範圍貼至儲存格
Sheets("sh1").[A1].Resize(UBound(陣列名,1) +1,UBound(陣列名,2) +1) = 陣列名
假設陣列內的資料是
1 2
3 4
5 6
顯示為
1 2
3 4
5 6
4.
(2維陣列,欄為固定) #陣列假設0~2列 為0~4欄,貼至儲存格1~5欄
Sheets("sheet1").range("a1").Resize(UBound(陣列名)+1, 5) = 陣列名
假設陣列內的資料是
1 2 3 4 5
6 7 8 9 0
a b c d e
顯示為
1 2 3 4 5
6 7 8 9 0
a b c d e
也可以寫成
Sheets("sheet1").range("a1").Resize(3, 5) = 陣列名
[請注意以上陣列 UBound(陣列名)是否需要+1 ]
尤其resiz後面用的數字,"並不是"陣列的欄列,而是要貼上儲存格的欄列,
因為陣列是從0開始算
儲存格都用1開始算,請注意
另外也可以將陣列設為 redim ar(1 to 5)搭配儲存格欄列號
或者一開始於最上方寫入 Option base 1 將所有陣列索引值下限的預設值改成 1
這四條方法
我找到外國網站才補齊= =
為了這四行,我花了快20小時 XD
還有靠office板的s大大才得以學會
也歡迎大大一起揪錯 感恩
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.35.158.244
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Visual_Basic/M.1485488105.A.DB6.html
1F:推 marki: 謝謝 01/28 10:03
2F:推 nicegigi: 推推 03/11 21:50
原先第二項是
Sheets("工作表1").[A1].Resize(1,UBound(陣列名,2) +1) = 陣列名
改成
Sheets("工作表1").[A1].Resize(1,UBound(陣列名,1) +1) = 陣列名
※ 編輯: waiter337 (36.237.149.168 臺灣), 10/17/2020 09:02:15
補充一下新進展(資料在國外找到的) 2021/4/21
二維陣列 取出 任一整欄所有資料 或 任一整列所有資料 貼上工作表的方法
(原先的方式只能用迴圈逐個篩出,但有人找到可以用index的方式幫助快速取得)
假設ar陣列內的資料是
1 2
3 4
5 6
單取陣列第一橫列所有資料的方法
[A1].Resize(2, 1) = Application.Transpose(Application.Index(ar, 1, 0))
2 <--這個數字自行調整成你想要貼上的範圍大小,以下例子皆是
顯示為
1
2
第二橫列資料全部取出
[A1].Resize(2, 1) = Application.Transpose(Application.Index(ar, 2, 0))
顯示為
3
4
第一直欄資料全部取出
[A1].Resize(3, 1) = Application.Index(ar, 0, 1)
顯示為
1
3
5
第二直欄資料全部取出
[A1].Resize(3, 1) = Application.Index(ar, 0, 2)
顯示為
2
4
6
追加一項
第二直欄資料全部取出放入另一個陣列br
br = Application.Index(ar, 0, 2)
br陣列顯示為
2
4
6
※ 編輯: waiter337 (36.236.165.70 臺灣), 04/22/2021 23:04:58
※ waiter337:轉錄至看板 Office 04/22 23:05
追加另外一項
如果想要把儲存格上的資料 貼到陣列 並成為二維陣列 或者 一維陣列 的方式
舉例:
三個字 "a", "b", "c" 分別位於 range("a1:a3")
想放入陣列 通常的作法是
ar = range("A1:A3")
會顯示為
ar(1,1) 為"a"
ar(2,1) 為"b"
ar(3,1) 為"c"
由於儲存格為2維陣列 轉換到陣列中 也是二維陣列
另問 是否有方式直接轉為一維陣列?
可用以下方法
ar = Application.Transpose(Range("A1:A3"))
會顯示為
ar(1) 為"a"
ar(2) 為"b"
ar(3) 為"c"_
※ 編輯: waiter337 (111.242.196.188 臺灣), 08/03/2021 15:35:56
※ 編輯: waiter337 (218.166.192.86 臺灣), 05/21/2022 06:50:28