• 系统环境:Windows 10
  • Excel:2016版本


本系列讲讲数组功能

今天说说数组与Excel单元格传递信息:即数组如何读取单元格中信息;数组信息如何写入Excel单元格



Part 1:应用场景

    • 有两个Excel工作表,表1:Excel读出;表2:数组写入,为空表
    1. 实现功能1,读取Excel中信息:
    2. 读取表1的A1-C1单元格区域,赋值给数组arr1
    3. 读取表1的A2-C3单元格区域,赋值给数组arr2
    • 实现功能2,数组写入Excel表格中
    1. arr1写入表2的A1-C1单元格区域
    2. 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:部分代码解读

  1. Excel单元格读取数据至数组,将单元格区域赋值给数组即可
  2. 无论赋值的1行还是2行单元格,对应数组都是2维数组
  3. 将数组赋值给Excel单元格区域,通过Resize函数先确认单元格区域
  4. 单元格.Resize(行数,列数),构建一个矩形区域,单元格为该矩形的左上角
  5. 当构建的单元格区域是多行多列时,对应的数组必须是2维数组,如果不是则赋值错误,如表2的E2-G3区域(对应代码shtArr.Range("E2").Resize(2, 3) = arr4,没有成功,返回多个#N/A)
  6. 通过arr4 = Array(Array(4, 5, 6), Array(7, 8, 9))构建的数组本质上还是一个1维数组,如图4所示(订正上一篇文章的错误),只不过每一个元素又是一个数组
  7. 通过两次转置WorksheetFunction.Transpose,可以将其变为真正的2维数组arr6,如图6所示
  8. 从本地窗口中查看两个数据的形式可以看到两者表达方式的不同


图4 arr4



图5 arr6



以上,为本次的介绍内容,下回见。

本文首发于微信公众号:Excel高效办公之VBA。排版和细节略作修改,发于头条