Excel-VBA-数组-03-数组与Excel单元格间的读写

微信公众号原文

系统:Windows 7
软件:Excel 2016

  • 本系列讲讲数组功能
  • 今天说说数组与Excel单元格传递信息:即数组如何读取单元格中信息;数组信息如何写入Excel单元格

Part 1:实现内容

  1. 有两个Excel工作表,表1:Excel读出;表2:数组写入,为空表
  2. 实现功能1,读取Excel中信息:
  • 读取表1的A1-C1单元格区域,赋值给数组arr1
  • 读取表1的A2-C3单元格区域,赋值给数组arr2
  1. 实现功能2,数组写入Excel表格中
  • arr1写入表2的A1-C1单元格区域
  • arr2写入表2的A2-C3单元格区域
  • 通过Array创建2个数组再写入表2单元格

表1:Excel读出
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g1FB2Q15-1591524526728)(https://upload-images.jianshu.io/upload_images/7490971-04a23685be638712.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

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

代码截图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Yt1dpPx-1591524526730)(https://upload-images.jianshu.io/upload_images/7490971-c89984f92a98146f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

运行过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZpsCxrU5-1591524526732)(https://upload-images.jianshu.io/upload_images/7490971-d2559dabc4999be3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UZIJHbci-1591524526733)(https://upload-images.jianshu.io/upload_images/7490971-f2cf5291d103feca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

Part 3: 部分代码解读

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

arr4
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3C1L9pqk-1591524526736)(https://upload-images.jianshu.io/upload_images/7490971-42522229f75a01b8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

arr6
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KzClc69s-1591524526737)(https://upload-images.jianshu.io/upload_images/7490971-66d763ed4e2239e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]


  • 更多学习交流,可加小编微信号learningBin

更多精彩,请关注微信公众号
扫描二维码,关注本公众号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-elOWOTGK-1591524526737)(http://upload-images.jianshu.io/upload_images/7490971-426ce9fb969584ac.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值