本文介绍如何利用 VBA 的数组(Array) 来提高 Excel 单元格和外部数据传输的性能。如果数量比较大,通过 Array 来传输数据比直接操作单元格要快若干倍。

将 Range 的数据写入 VBA Array

将 Range 数据写入 VBA 的数组非常简单。下面的例子演示了用法:

Dim Arr() as Varint  ' Declare an unallocated array
Arr = Range("A1:C5") ' Arr is now an allocated array

当我们将数据从工作表的range 写入到 VBA 数组的时候,这个数组始终是二维的。第一个维度是行,第二个维度是列。所以,刚才定义的数组有 5 行,有 3 列,等同于 Arr(1 to 5, 1 to 3) 。需要注意的是,即使在 Excel 中只有一行或者一列,这个数组也是二维的,可以理解为 Arr(1 to 1, 1 to 1)。 另外,数组的下标 (LBound) 始终从 1 开始。比如:

Dim Arr() as Variant
Arr = Range("A1:A10")

Arr 相当于 Arr(1 to 10, 1 to 1)

下面的代码演示了如何遍历工作表中 Range 的值:

Public Sub PrintCells()Dim arr() As Variantarr = Range("A1:C5")Dim r As Long  ' r: rowDim c As Long  ' c: columnFor r = 1 To UBound(arr, 1)     '第一个维度是行数For c = 1 To UBound(arr, 2) '第二个维度是列数Debug.Print arr(r, c),NextDebug.PrintNext
End Sub

有一个特例。如果单元格的数量只有一个,那么就不能作为二维数组。上面的代码在一个单元格的时候会出错,需要调整为下面的代码:

Public Sub PrintCells(rng as Range)Dim arr() As VariantIf rng.Cells.Count = 1 ThenReDim arr(1 To 1, 1 To 1)arr(1, 1) = rng.ValueElsearr = rngEnd IfDim r As Long  ' r: rowDim c As Long  ' c: columnFor r = 1 To UBound(arr, 1)     '第一个维度是行数For c = 1 To UBound(arr, 2) '第二个维度是列数Debug.Print arr(r, c),NextDebug.PrintNext
End Sub

将一维数组写入单元格

一维数组可以按行输出,实现的要点:定义一个 Range,将 Range 的列扩充为数组的UBound。

Public Sub WriteOneDimensionArr()Dim arr() As VariantReDim arr(1 To 5)arr(1) = 1arr(2) = 2arr(3) = 3arr(4) = 4arr(5) = 5Dim destination As RangeSet destination = Range("A10")Set destination = destination.Resize(1, UBound(arr)) '对数组进行行扩充destination.Value = arr
End Sub

当然,一维数组也可以实现按列输出:

Public Sub WriteOneDimensionArr2()Dim arr() As VariantReDim arr(1 To 5)arr(1) = 1arr(2) = 2arr(3) = 3arr(4) = 4arr(5) = 5Dim destination As RangeSet destination = Range("A10")Set destination = destination.Resize(UBound(arr), 1) '对数组进行行扩充destination.Value = Application.Transpose(arr)
End Sub

二维数组写入单元格

实际上,将二维数组写入到单元格更加直观。数组的第 1 个维度是行数,第 2 个维度是列数。我们通过下面的示例,演示如果将 A1:C5 的数据拷贝到另外一个区域:

Public Sub CopyCells()Dim arr() As Variantarr = Range("A1:C5")Dim destination As RangeSet destination = Range("A10")destination.Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End Sub

VBA数组和Excel工作表数据传递相关推荐

  1. 在Excel工作表数据输入表单中编辑记录

    How can you make it easy for people to enter and edit data in Excel, but keep them away from the dat ...

  2. VBA中使用EXCEL工作表函数

    EXCEL的VBA有两个函数库,一个是VBA的函数库,另一个是EXCEL工作表函数,也就是我们在单元格中使用的函数,两个函数库不是完全一样的.例如FIND(),VLOOKUP(),在VBA的函数库中是 ...

  3. 通过VBA宏合并Excel工作表

    工作中经常会用到的把几个Excel文件合并到一个,或者是把一个Excel文件里的所有Sheet合并到一个Sheet来进行统计.下面分别提供用vba宏来解决这两个问题的方法. 1.合并Excel文件 打 ...

  4. Excel 2010 VBA 入门 105 将工作表数据批量导出为图片

    目录 示例 代码 Copy. Cut和Paste方法 图表对象(Chart)的Export方法 利用PPT导出图片 示例 为防止数据的更改或者盗用,将所选的数据区域导出为图片进行展示. 代码 在Exc ...

  5. vba二维数组初始化_将工作表数据写入VBA数组

    大家好,最近推出的内容是"VBA信息获取与处理"中的部分内容,这套教程面向中高级人员,涉及范围更广,实用性更强,现在的内容是第四个专题"EXCEL工作表数据的读取.回填和 ...

  6. vba ado返回集合_利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总

    大家好,今天继续讲解<VBA数据库解决方案>,今日讲解的是第37讲,利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总.最近的内容实用性比较强,如今日的内容,只把需要汇总的EXCE ...

  7. Excel如何实现两个工作表数据的对比

    Excel如何实现数据的对比呢?在利用Excel处理记录时,我们通过会面对一种情况,就是将两张工作表进行对比,以便从中找出不同记录或数据.此时情况特别适合验证信息的完整性以及检验数据的差异性方法.下面 ...

  8. SAP 导出 HTML,【我sap这导出数据表格export.mhtml怎么转换为 excel 工作表.xlsx】excel生成html表格数据...

    如何把Html网页格式转成Excel表格 1.单击数据--导部数据--新建Web查询. 2.勾选我可以此内容,允许播放,单击继续按钮. 3.在地址栏输入网站地址,转到此网站里面. 4.跳转到指定网页, ...

  9. 计算机用公式找出第一名,用公式查找Excel工作表中重复数据

    前不久,一位网友求教,要求找出Excel工作表中的重复数据并在单元格中列出.我给出了一个数组公式供参考,但不是太符合要求,因为这个数组公式虽然找出了重复数据,但是如果将数组公式向下复制时超出了出现重复 ...

最新文章

  1. ORACLE分页查询SQL语法——最高效的分页
  2. 用python画漂亮图片-使用 Python/matplotlib 画出漂亮的论文插图
  3. 从HEVC到通用视频编码的下一代视频压缩技术
  4. 任正非:华为要防止内卷 精益求精不叫内卷
  5. 软件著作权申请教程模板材料下载
  6. php ood,ooa ood oop编程思想_php oop思想_冒号课堂编程范式与oop思想
  7. JDBC 实现数据库增删改查
  8. bwa manul page
  9. 微信oauth MySQL_微信OAuth2网页授权登陆接口PHP实例下载
  10. 联想Lephone与Apple iPAD的完美组合
  11. FlyAI小课堂:python机器学习笔记:深入学习决策树算法原理
  12. html5支付成功页面,订单完成页面视图《 微信支付:H5 移动端支付 》
  13. Total Access Emailer维护审计跟踪
  14. 【ViewPager的学习】一、简单使用
  15. Leaving Auction-一道就考set特性的题目
  16. Python Selenium + PhantomJS爬取考拉海购商品数据
  17. 两行Python代码 新建一个txt文件并写入
  18. Photoshop合并多个图片为PDF格式文件的(PDF文件编辑删除页面及合并的操作方法)解决方案
  19. 使用Apache poi 导出excel含有柱状图
  20. vue使用cesium

热门文章

  1. 评价下数字尾巴这个网站
  2. 【PS】制作简单标签及裁剪工具讲解
  3. MySQL 8 复制(六)——拓扑与性能
  4. 推荐引擎算法学习导论:协同过滤、聚类、分类(2011年旧文)
  5. Flex 布局(layout)
  6. java程序员的大数据之路(12):Hadoop的守护进程
  7. 开机启动时右下角的小喇叭不见了
  8. 打造高效、实用的办公神器,360桌面助手有何过人之处?
  9. python如何设置单线程爬虫
  10. 转让一套基于 Flash 的网页版棋牌平台