
《VBA数组与字典方案》教程10144533是我推出的第三套教程目前已经是第二版修订了。这套教程定位于中级字典是VBA的精华我要求学员必学。7.1.3.9教程和手册掌握后可以解决大多数工作中遇到的实际问题。这套字典教程共两册一共八十四讲今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是数组与字典解决方案第三十二讲 数组的拆分和维数转换【分享成果随喜正能量】很多时候让自己感到痛苦的从不是外在而是自己的心态和情绪。山穷水复疑无路柳暗花明又一村。要学会欣赏自己、珍爱自己为自己点赞遇事多往好处想多聆听自己的心声稳住心神、淡定坦然才能走得更稳、更远。第三十二讲 数组的拆分和维数转换大家好我们今日继续VBA数组与字典解决方案的讲解今日讲解第32讲数组的拆分和维数转换1 数组的拆分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) 把单元格区域A1B4的值装入数组arr1arr2 Application.Index(arr1, , 2) 把数组第2列拆分出来装入新数组arr2中新数组为二维数组MsgBox arr2(2, 1) 取出新数组第2行的值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) 把单元格区域A1B4的值装入数组arr1arr5 Application.Transpose(Application.Index(arr1, , 2)) 取得arr1第2列数据并转置成1维数组MsgBox arr5(2)3 数组的拆分和维数的转换代码示例今日代码实例Sub MyNZsz_32() 第32讲 数组的拆分和维数的转换Sheets(32).Select数组的拆分arr1 Range(A1:C10) 把单元格区域A1B4的值装入数组arr1arr2 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) 把单元格区域A1B4的值装入数组arr1arr5 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)), -)上述代码中 为什么要进行两次转置我多年的VBA实践经验全部浓缩在以下教程中