网站首页 > 技术文章 正文
【分享成果,随喜正能量】让自己的心保持柔软,力量不在强硬而在柔软中,能伸能屈的树木才能抵得过狂风,为自己建立一个敏捷的心智。人生很奇妙,许多事都不是我们能预料的,只是一味地抗拒,并不能解决问题,我们需要的是无限柔软和真诚的心。
《VBA信息获取与处理》教程是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。
教程共两册,八十四讲。今日的内容是专题四“EXCEL工作表数据的读取、回填和查找”的第2讲:如何将工作表数据赋值给数组
第二节 将工作表数据写入VBA数组
在上一节中我们讲了实现工作表数据与VBA代码间传输的几种方法,这讲我将我们将着重讲解如何将工作表的数据写入数组。
1 读取工作表上的范围并将其放入数组
在VBA中,可以直接读取工作表上的范围并将其放入数组,这种方法非常简单。例如,
Dim Arr() As Variant
Arr = Range("A1:C5")
上述代码中首先声明一个变体型可变数组变量,然后将这个变量指向指定的区域,如果我们不能确定这个区域的大小,或者这个区域是可变的,我们可以利用下面的语句;
① myarr = Sheets("41").UsedRange
② myarr = Sheets("40").[a1].CurrentRegion
③ myarr = Range("a2:c" & Range("c2").End(xlDown).row)
④ myarr = Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).row)
⑤ myarr = Range("a2:f" & [a65536].End(xlUp).Row)
⑥ myarr1 = Range([A2], [A65536].End(xlUp))
上面的各种写法均是我的第三套教程《VBA数组与字典解决方案》中的一些实际写法,第一种表示整个工作表的使用区域,第二种是以“A1”单元格为起点的矩形区域,第三种是表示A2到C列最后一个不为空的单元格的矩形区域,第四种是表示A列的使用区域(含空格),第五种是A2到F列的最后使用单元格的区域(适用于低版本的excel),第六种是A列第二个单元格之下的使用区域(含空单元格)
2 读取工作表上指定范围获得数组后维数的确认
利用上述方案将工作表中的数据引入VBA数组后,我们要注意该数组始终是二维的。第一个维度是行,第二个维度是列。因此,下面的例子:
Dim Arr() As Variant
Arr = Range("A1:C5")
Arr被隐式地调整为Arr(1 to 5,1 to 3),其中5是行数,3是列数。即使工作表数据位于一行或一列(例如,Arr(1 to 10,1 to 1))中,也会创建二维数组。加载工作表数据的数组始终具有等于1的下限(LBound),而不管模块中可能具有什么选项基指令。你不能改变这种行为。例如:
Dim Arr() As Variant
Arr = Range("A1:A10")
这里,Arr由VBA自动标注为Arr(1 to 10,1 to 1)。您可以使用如下代码在工作表值数组中循环:
Sub MYNZC()
Dim Arr() As Variant
Arr = Range("A1:B10")
Dim R As Long
Dim C As Long
For R = 1 To UBound(Arr, 1) ' 数组第一维表示行.
For C = 1 To UBound(Arr, 2) '数组第二维表示列
Debug.Print Arr(R, C)
Next
Next
End Sub
代码截图:
代码的运行:
3 工作表上指定范围如果是一个单元格时
在将指定的范围数据引入数组时很多的时候我们会遇到一种特例,就是只有一个单元格,这个时候往往利用上述方法会报错,有的时候是数组的赋值报错,有的时候是数组的上下标报错,视具体的代码应用而定。这个错误该该如何处理呢?我们可以利用下面的代码:
Sub MYNZD() '当工作表上的区域是单个单元格时
Dim Arr As Variant
Sheets("Sheet3").UsedRange.Select
m = Selection.Cells.Count
If m = 1 Then
ReDim Arr(1 To 1, 1 To 1)
Arr(1, 1) = Sheets("Sheet3").UsedRange
MsgBox Arr(1, 1)
Else
Arr = Sheets("Sheet3").UsedRange
MsgBox Arr(1, 1)
End If
End Sub
代码截图:
上面的代码成功的避免了这种错误。大家在利用这种数组赋值时避免这类错误的发生。
本节知识点回向:读取指定范围的数据到数组有哪些方法可以利用?读取后的数组是几维数组?如何避免指定范围只有一个单元格的情况?
本专题参考程序文件:004工作表.XLSM
我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:
① 7→1→3→2→6→5或者7→4→3→2→6→5。
② 7→8
各套教程内容简介:
第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解
第1套教程(共三册):《VBA代码解决方案》:是入门后的提高教程
第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)
第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解
第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解
第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用
第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解
第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用
- 第六套教程:VBA信息获取与处理,这是一部高级教程,涉及范围更广,实用性更强,面向中高级人员。教程共二十个专题,包括:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。
猜你喜欢
- 2024-10-19 Excel中使用VBA你不可不知道的使用数组,干货分享
- 2024-10-19 Excel VBA入门教程1.3 数组基础(vba数组操作方法大全)
- 2024-10-19 C语言中为何不能直接对一个数组对象赋值
- 2024-10-19 第七节:C语言基础——二维数组(c语言二维数组怎么用)
- 2024-10-19 学会这两招,PLC编程也可以批量化定义变量-数组、结构
- 2024-10-19 1键搞定数组赋值,并回填数据给工作表
- 2024-10-19 C++|二维数组转一维数组及二维数组用数组指针输出
- 2024-10-19 数组结构分为一维数组二维数组一维数组赋值使用
- 2024-10-19 西门子SCL编程之赋值语句概述及赋值语句的使用方法
- 2024-10-19 C|折腾二维数组(c++二维数组的赋值)
- 1509℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 530℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 494℃MySQL service启动脚本浅析(r12笔记第59天)
- 473℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 470℃启用MySQL查询缓存(mysql8.0查询缓存)
- 451℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 430℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 427℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)