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

第二节 将工作表数据写入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

VBA是利用Office实现自己小型办公自动化的有效手段,这是我对VBA的应用界定。在取代OFFICE新的办公软件没有到来之前,谁能在数据处理方面做到极致,谁就是王者。其中登峰至极的技能非VBA莫属!学习VBA是个过程,也需要经历一种枯燥的感觉,如太白诗云:众鸟高飞尽,孤云独去闲。相看两不厌,只有敬亭山。

“水善利万物而不争”,绵绵密密,微则无声,巨则汹涌。学习亦如此,知道什么是自己所需要的,不要蜷缩在一小块自认为天堂的世界里,待到暮年时再去做自欺欺人的言论。要努力提高自己,用一颗充满生机的心灵,把握现在,这才是进取。越是有意义的事情,困难会越多。愿力决定始终,智慧决定成败。不管遇到什么,都是风景。看淡纷争,看轻得失。茶,满也好,少也好,不要计较;浓也好,淡也好,其中自有值得品的味道。去感悟真实的时间,静下心,多学习,积累福报。而不是天天混日子,也不是天天熬日子。在后疫情更加严峻的存量残杀世界中,为自己的生存进行知识的储备,特别是新知识的储备。学习时微而无声,利用时则巨则汹涌。

我记得20年前自己初学VBA时,那时的资料甚少,只能看源码自己琢磨,真的很难。20年过去了,为了不让学习VBA的朋友重复我之前的经历,我根据自己多年VBA实际利用经验,推出了六部VBA专门教程。

第一套:VBA代码解决方案 是VBA中各个知识点的讲解,覆盖绝大多数的VBA知识点,初学必备;

第二套:VBA数据库解决方案 数据库是数据处理的专业利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,适合中级人员的学习。

第三套:VBA数组与字典解决方案 数组和字典是VBA的精华,字典是VBA代码水平提高的有效手段,值得深入的学习,是初级及中级人员代码精进的手段。

第四套:VBA代码解决方案之视频 是专门面向初学者的视频讲解,可以快速入门,更快的掌握这门技能。

第五套:VBA中类的解读和利用 这是一部高级教程,讲解类的虚无与肉身的度化,类的利用虽然较少,但仔细的学习可以促进自己VBA理论的提高。

第六套教程:《VBA信息获取与处理》是一部高级教程,涉及范围更广,实用性更强,面向中高级人员。教程共二十个专题,包括:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。如需要可以可以WeChat: NZ9668

学习的过程也是修心的过程,修一个平静的心。在代码的世界中,心平静了,心情好了,身体自然而然就好。心静则正,内心里没有那么多邪知邪见,也就没有那么多妄想。利人就是利己。这些教程也是为帮助大家起航,助上我自己之力,我的上述教程是我多的经验的传递,大家可以根据以上资料1,3,2,6,5或者是4,3,2,6,5的顺序逐渐深入的逐渐学习。

每一分收获都是成长的记录,怎无凭,正是这种执着,成就了朝霞的灿烂。最后将一阙词送给致力于VBA学习的朋友,让大家感受一下学习过程的枯燥与执着:

浮云掠过,暗语无声,

唯有清风,惊了梦中啼莺。

望星,疏移北斗,

奈将往事雁同行。

阡陌人,昏灯明暗,

忍顾长亭。

多少VBA人,

暗夜中,悄声寻梦,盼却天明。

怎无凭!

分享成果,随喜正能量

vba二维数组初始化_将工作表数据写入VBA数组相关推荐

  1. c语言定义不定长数组初始化_大学C语言期末考试练习题(带详解答案)(1)

    链接:https://pan.baidu.com/s/1d2Bb1vNTyBNpFGneIAicVw 提取码:y7uw 单项选择题 C语言的基本单位是 函数 1.(A  )是构成C语言程序的基本单位. ...

  2. VBA数组和Excel工作表数据传递

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

  3. Golang二维切片初始化

    本文主要介绍Golang二维切片初始化的实现 引言 之前,刷Leetcode的时候,有些题需要初始化二维数组,而一维数组的初始化,比如: var a = [5]int{1, 2, 3, 4, 5} / ...

  4. 二维码简介_二维码基本概念_二维码基本原理

    一.二维码简介_二维码基本概念_二维码基本原理 1.二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Ba ...

  5. C++ 二维vector初始化、resize()

    二维vector初始化 1.定义时就设置大小.初值 vector<vector<int> > v(2, vector<int>(4,1));//2行*4列,初始化为 ...

  6. 查询两张表 然后把数据并在一起_工作表数据查询时,类似筛选功能LIKE和NOT LIKE的应用...

    大家好,我们继续讲解VBA数据库解决方案,今日讲解第53讲内容:工作表查询时,类似于筛选功能的LIKE和NOT LIKE 的应用.大家在工作的时候,利用EXCEL操作,筛选是必不可少的工具之一.例如我 ...

  7. vba显示正在加载_简单、易用的VBA过程积木代码

    分享成果,随喜真能量(这是我视频教程的开场白).大家好,今天继续和大家分享VBA编程中常用的简单"积木"过程代码第76-80讲,内容是:保存当前工作簿的副本到其它位置备份:不显示警 ...

  8. wpf 如何实现窗口浮动_如何实现工作表数据与UserForm窗口的交互,显示第一条记录...

    大家好,我们今天继续讲解VBA数据库解决方案,今日讲解的是第77讲:工作表数据与UserForm窗口的交互:第一条记录的显示.从这讲开始,我将利用7讲的时间,给大家详细讲解一个工作表数据库的准实例,虽 ...

  9. easyui的textbox实现编辑保存_第80讲:工作表数据与UserForm窗口的交互,记录的编辑和保存...

    大家好,我们今天继续讲解VBA数据库解决方案,今日讲解的是第80讲:工作表数据与UserForm窗口的交互过程中:如何对显示的记录进行编辑和保存.在前几讲中,我们实现了将工作表的数据传给UserFor ...

最新文章

  1. 千万别中招!手把手教你复现Log4j2漏洞!
  2. iOS架构-静态库.framework脚本化打包补充(5)
  3. 基于角色的权限设计(一)
  4. LOJ#6002. 「网络流 24 题」最小路径覆盖
  5. GMA Round 1 极坐标的忧伤
  6. Spring Cloud Netflix之Eureka上篇
  7. 微星msi B450M+i5-8500+1060成功黑苹果
  8. css权威指南 读书笔记
  9. 应急响应(日志/流量)
  10. SECS/GEM通信
  11. 图片倒影控件ReflectionImage
  12. 开发一个App来为你的女神“化妆”!
  13. 同步通信和异步通信的爱恨情仇
  14. 【MidJourney】初体验——账号注册与基本操作
  15. 跪了!美团Android开发工程师岗位职能要求,重难点整理
  16. 如何用Excel画出漂亮的图(office 2016)
  17. 每日爬虫:爬百度千千音乐
  18. 触摸屏左右屏幕外向内滑动_外向内发展的案例
  19. SpringCloud07_消息总线(Bus)
  20. 教师资格证科目二主观题汇总

热门文章

  1. 服务器显示器切换_尼某某 DDOS 攻击高德,致使服务器处于黑洞状态 5 个多小时:被判 16 个月...
  2. html文字跳转备注,界面跳转备注.html
  3. r语言 rgl 强制过程中_一个R语言中操纵矢量空间数据的标准化工具—sf
  4. OpenCASCADE绘制测试线束:图形命令之VIS 查看器命令
  5. OpenCASCADE:形状愈合之修复
  6. boost::type_erasure::binding_of相关的测试程序
  7. boost::math::boost::math::interpolators::cardinal_cubic_b_spline用法的测试程序
  8. boost::hana::slice_c用法的测试程序
  9. boost::geometry模块多边形DP算法简化示例
  10. ITK:计算两个图像之间的均方度量值