作者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/cn.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