欢迎大家来到IT世界,在知识的湖畔探索吧!
大家好,我们今日继续VBA数组与字典解决方案的讲解,今日讲解第32讲,数组的拆分和维数转换:
一 数组的拆分
1. 用Index拆分数组
数组的拆分在VBA中是一个难题,如果是按行拆分数组,除了用循环外也只能借用API函数完成了。幸好我们可以借用工作表函数index达到按列拆分数组。
语法:数组形式INDEX(array,row_num,column_num)
参数:
① Array 为单元格区域或数组常量。
② 如果数组只包含一行或一列,则相对应的参数 row_num 或 column_num 为可选。
如果数组有多行和多列,但只使用 row_num 或 column_num,函数 INDEX 返回数组中的整行或整列,且返回值也为数组。
③ Row_num 数组中某行的行序号,函数从该行返回数值。如果省略 row_num,则必须有Column_num。
④ Column_num 数组中某列的列序号,函数从该列返回数值。如果省略 column_num,则必须有 row_num。
特别说明:
①如果同时使用 row_num 和 column_num,函数 INDEX 返回 row_num 和 column_num 交叉处的单元格的数值。
②如果将 row_num 或 column_num 设置为 0,函数 INDEX 则分别返回整个列或行的数组数值。Row_num 和 column_num 必须指向 array 中的某一单元格;否则,函数 INDEX 返回错误值 #REF!。
例:=INDEX(A2:B3,2,2) 返回单元格区域的第二行和第二列交叉处的值
=INDEX(A2:B3,2,1) 返回单元格区域的第二行和第一列交叉处的值
2 用Index函数取出任意一列的数组
我们可以任意拆分出一列构成新的数组。方法是:Application.Index(数组, , 列数) 。
Sheets(“32”).Select
‘数组的拆分
arr1 = Range(“A1:C10”) ‘把单元格区域A1:B4的值装入数组arr1
arr2 = Application.Index(arr1, , 2) ‘把数组第2列拆分出来装入新数组arr2中,新数组为二维数组
MsgBox arr2(2, 1) ‘取出新数组第2行的值
二 数组维数的转换
Transpose转置数组在工作表中可以把行列转换。在VBA中同样也可以做到转换的效果。
1、一维转二维。
‘数组维数的转换
arr3 = Array(10, 350, “aq”, 40, 103, “bw”)
arr4 = Application.Transpose(arr3)
MsgBox arr4(2, 1) ‘转换后的数组是1列多行的二维数组2、二维数组转一维。
2 两维转一维注:在转置时,当只有1列N行的数组才能直接转置成一维数组
‘数组维数的转换2维转1维
arr1 = Range(“A1:C10”) ‘把单元格区域A1:B4的值装入数组arr1
arr5 = Application.Transpose(Application.Index(arr1, , 2)) ‘取得arr1第2列数据并转置成1维数组
MsgBox arr5(2)
今日代码实例:
Sub MyNZsz_32() ‘第32讲 数组的拆分和维数的转换
Sheets(“32”).Select
‘数组的拆分
arr1 = Range(“A1:C10”) ‘把单元格区域A1:B4的值装入数组arr1
arr2 = Application.Index(arr1, , 2) ‘把数组第2列拆分出来装入新数组arr2中,新数组为二维数组
MsgBox arr2(2, 1) ‘取出新数组第2行的值
‘数组维数的转换
arr3 = Array(10, 350, “aq”, 40, 103, “bw”)
arr4 = Application.Transpose(arr3)
MsgBox arr4(2, 1) ‘转换后的数组是1列多行的二维数组
‘数组维数的转换2维转1维
arr1 = Range(“A1:C10”) ‘把单元格区域A1:B4的值装入数组arr1
arr5 = Application.Transpose(Application.Index(arr1, , 2)) ‘取得arr1第2列数据并转置成1维数组
MsgBox arr5(2)
arr6 = Range(“A1:C1”)
MsgBox Join(Application.Transpose(Application.Transpose(arr6)), “-“)
End Sub
代码截图:
看我们的工作表:
上述代码共要弹出4个对话框:
分别是什么呢?大家不难看出看出分别弹出:
今日内容回向;1 如何拆分数组?
2 如何使数组维数发生转换?
3 arr6 = Range(“A1:C1”)
MsgBox Join(Application.Transpose(Application.Transpose(arr6)), “-“)
上述代码中 为什么要进行两次转置?
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/36138.html