VBA数组和Excel工作表数据传递
本文介绍如何利用 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工作表数据传递相关推荐
- 在Excel工作表数据输入表单中编辑记录
How can you make it easy for people to enter and edit data in Excel, but keep them away from the dat ...
- VBA中使用EXCEL工作表函数
EXCEL的VBA有两个函数库,一个是VBA的函数库,另一个是EXCEL工作表函数,也就是我们在单元格中使用的函数,两个函数库不是完全一样的.例如FIND(),VLOOKUP(),在VBA的函数库中是 ...
- 通过VBA宏合并Excel工作表
工作中经常会用到的把几个Excel文件合并到一个,或者是把一个Excel文件里的所有Sheet合并到一个Sheet来进行统计.下面分别提供用vba宏来解决这两个问题的方法. 1.合并Excel文件 打 ...
- Excel 2010 VBA 入门 105 将工作表数据批量导出为图片
目录 示例 代码 Copy. Cut和Paste方法 图表对象(Chart)的Export方法 利用PPT导出图片 示例 为防止数据的更改或者盗用,将所选的数据区域导出为图片进行展示. 代码 在Exc ...
- vba二维数组初始化_将工作表数据写入VBA数组
大家好,最近推出的内容是"VBA信息获取与处理"中的部分内容,这套教程面向中高级人员,涉及范围更广,实用性更强,现在的内容是第四个专题"EXCEL工作表数据的读取.回填和 ...
- vba ado返回集合_利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总
大家好,今天继续讲解<VBA数据库解决方案>,今日讲解的是第37讲,利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总.最近的内容实用性比较强,如今日的内容,只把需要汇总的EXCE ...
- Excel如何实现两个工作表数据的对比
Excel如何实现数据的对比呢?在利用Excel处理记录时,我们通过会面对一种情况,就是将两张工作表进行对比,以便从中找出不同记录或数据.此时情况特别适合验证信息的完整性以及检验数据的差异性方法.下面 ...
- SAP 导出 HTML,【我sap这导出数据表格export.mhtml怎么转换为 excel 工作表.xlsx】excel生成html表格数据...
如何把Html网页格式转成Excel表格 1.单击数据--导部数据--新建Web查询. 2.勾选我可以此内容,允许播放,单击继续按钮. 3.在地址栏输入网站地址,转到此网站里面. 4.跳转到指定网页, ...
- 计算机用公式找出第一名,用公式查找Excel工作表中重复数据
前不久,一位网友求教,要求找出Excel工作表中的重复数据并在单元格中列出.我给出了一个数组公式供参考,但不是太符合要求,因为这个数组公式虽然找出了重复数据,但是如果将数组公式向下复制时超出了出现重复 ...
最新文章
- ORACLE分页查询SQL语法——最高效的分页
- 用python画漂亮图片-使用 Python/matplotlib 画出漂亮的论文插图
- 从HEVC到通用视频编码的下一代视频压缩技术
- 任正非:华为要防止内卷 精益求精不叫内卷
- 软件著作权申请教程模板材料下载
- php ood,ooa ood oop编程思想_php oop思想_冒号课堂编程范式与oop思想
- JDBC 实现数据库增删改查
- bwa manul page
- 微信oauth MySQL_微信OAuth2网页授权登陆接口PHP实例下载
- 联想Lephone与Apple iPAD的完美组合
- FlyAI小课堂:python机器学习笔记:深入学习决策树算法原理
- html5支付成功页面,订单完成页面视图《 微信支付:H5 移动端支付 》
- Total Access Emailer维护审计跟踪
- 【ViewPager的学习】一、简单使用
- Leaving Auction-一道就考set特性的题目
- Python Selenium + PhantomJS爬取考拉海购商品数据
- 两行Python代码 新建一个txt文件并写入
- Photoshop合并多个图片为PDF格式文件的(PDF文件编辑删除页面及合并的操作方法)解决方案
- 使用Apache poi 导出excel含有柱状图
- vue使用cesium