- 系统环境:Windows 10
- Excel:2016版本
本系列讲讲数组功能
今天说说数组与Excel单元格传递信息:即数组如何读取单元格中信息;数组信息如何写入Excel单元格
Part 1:应用场景
- 有两个Excel工作表,表1:Excel读出;表2:数组写入,为空表
- 实现功能1,读取Excel中信息:
- 读取表1的A1-C1单元格区域,赋值给数组arr1
- 读取表1的A2-C3单元格区域,赋值给数组arr2
- 实现功能2,数组写入Excel表格中
- arr1写入表2的A1-C1单元格区域
- arr2写入表2的A2-C3单元格区域
- 通过Array创建2个数组再写入表2单元格
图1 Excel读出
Part 2:代码
Sub test1()
' 读取Excel数据
Set shtExcel = ThisWorkbook.Worksheets("Excel读出")
arr1 = shtExcel.Range("A1:C1")
arr2 = shtExcel.Range("A2:C3")
' 数组写入Excel
arr3 = Array(1, 2, 3)
arr4 = Array(Array(4, 5, 6), Array(7, 8, 9))
'转置
arr5 = WorksheetFunction.Transpose(arr4)
arr6 = WorksheetFunction.Transpose(arr5)
Set shtArr = ThisWorkbook.Worksheets("数组写入")
shtArr.Cells.ClearContents
shtArr.Range("A1").Resize(1, 3) = arr1
shtArr.Range("A2").Resize(2, 3) = arr2
shtArr.Range("E1").Resize(1, 3) = arr3
shtArr.Range("E2").Resize(2, 3) = arr4
shtArr.Range("E7").Resize(1, 3) = arr4(0)
shtArr.Range("E8").Resize(1, 3) = arr4(1)
shtArr.Range("E10").Resize(2, 3) = arr6
End Sub
图2 运行过程
图3 运行结果
Part 3:部分代码解读
- Excel单元格读取数据至数组,将单元格区域赋值给数组即可
- 无论赋值的1行还是2行单元格,对应数组都是2维数组
- 将数组赋值给Excel单元格区域,通过Resize函数先确认单元格区域
- 单元格.Resize(行数,列数),构建一个矩形区域,单元格为该矩形的左上角
- 当构建的单元格区域是多行多列时,对应的数组必须是2维数组,如果不是则赋值错误,如表2的E2-G3区域(对应代码shtArr.Range("E2").Resize(2, 3) = arr4,没有成功,返回多个#N/A)
- 通过arr4 = Array(Array(4, 5, 6), Array(7, 8, 9))构建的数组本质上还是一个1维数组,如图4所示(订正上一篇文章的错误),只不过每一个元素又是一个数组
- 通过两次转置WorksheetFunction.Transpose,可以将其变为真正的2维数组arr6,如图6所示
- 从本地窗口中查看两个数据的形式可以看到两者表达方式的不同
图4 arr4
图5 arr6
以上,为本次的介绍内容,下回见。
本文首发于微信公众号:Excel高效办公之VBA。排版和细节略作修改,发于头条