商务服务
VBA信息获取与处理第四个专题第三节:VBA数组数据回填工作表
2025-01-12 11:03

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。

【分享成果,随喜正能量】心中有法喜、有慈悲,散发出来气质就是欢喜与祥和;这些可以从一个人的音声、动作中感受得到。。

这个专题,我们讲解工作表数据的处理的问题,对于VBA而言,我给予的定位是“实现个人小型数据自动化处理的利器”,对于大多数朋友而言,利用VBA是与EXCEL相关联的,很多的代码也是用于处理EXCEL内或者相关的各种数据,工作表更是作为和用户的交互对象而存在,那么对于工作表的数据如何进行查找,以及如何读取就是一个十分关键的课题,我们这讲就来主要讲解这个问题。

在前两节我们讲了如何将工作表中的数据读到数组中,这种操作的实质其实是:将数据预存到内存中,然后在内存中调取数据再进行下一步操作,这样可以节约反复提取数据的时间。

当我们在内存中将数据计算完成后,需要将结果数组回填给工作表,又要注意哪些问题呢?对于工作表而言,可以回填的是数组可以是一维或二维的。我们在这一节和下一节将讲解数组回填工作表的问题。本节先讲解一维数组的回填。

一维数组回填原则:若要将一维数组写入工作表,必须创建一个Range对象,将该范围调整为数组的大小,然后写入该范围。

假设我们有一个一维数组,并希望从单元格A1开始将其写入工作表。代码必须首先调整目标范围的大小。例如下面的代码:

Sub MYNZE() '一维数组数据的回填方案

Dim Arr As Variant

Dim MyRange As Range

Sheets("SHEET4").Select

Arr = Array("大象", "老虎", "狮子", "狐狸")

Set MyRange = Range("A1")

Set MyRange = MyRange.Resize(1, UBound(Arr) + 1)

MyRange.ClearContents

MyRange.Value = Arr

MsgBox "ok!"

End Sub

代码截图:

代码讲解:上述代码首先从Arr = Array("大象", "老虎", "狮子", "狐狸")中取得数组的数据,当然,这里我没有对取得的数组数据做任何的计算处理,只是回填的操作。在回填数据的时候,先获取要回填区域的基准单元格,这里我给出的是A1,然后将以这个单元格为基准进行扩展,扩展到和数组同样大小的区域:即 Resize(1, UBound(Arr) + 1),最后进行数据的回填。关于单元格的Resize属性,在我的教程《VBA代码解决方案》中有详细的讲解大家可以参考。

这里我们要注意的是对于对象变量的赋值用的是SET: Set MyRange = Range("A1"),这一点在我的教程《VBA中类的解读及应用》中已经详细的说明,大家要注意对象变量和普通变量的区别。

在整个代码中还利用了单元格的ClearContents属性对单元格进行回填前的清理工作。

最后我们看看代码的运行结果:

对于一维数组的回填我们还要注意:当回填区域比数组大时,多余的区域会出现”#N/A”符号,表示没有数据可以回填。

二维数组回填原则:如果将二维数组回填工作表,则需要使用“Resize”将目标范围调整为适当的大小。第一个维度是行数,第二个维度是列数。

下面的代码演示如何从单元格A1开始将数组Arr写入工作表:

Sub MYNZF() '二维数组数据的回填方案

Dim Arr As Variant

Dim MyRange As Range

Sheets("SHEET4").Select

Arr = Sheets("SHEET2").Range("A1:b9")

Set MyRange = Range("A1")

Set MyRange = MyRange.Resize(UBound(Arr, 1), UBound(Arr, 2))

MyRange.ClearContents

MyRange.Value = Arr

MsgBox "ok!"

End Sub

代码的截图:

代码讲解:上述代码首先从工作表SHEET2中提取数据放到数组之中,这里的数据没有任何的修改:Arr = Sheets("SHEET2").Range("A1:b9"),对于基准单元格我们利用了Resize 语句来扩展单元格。MyRange = MyRange.Resize(UBound(Arr, 1), UBound(Arr, 2)) ,这个语句中UBound(Arr, 1)是扩展的是行数,UBound(Arr, 2)是扩展的是列数。

下面我们看代码的运行结果:

和一维数组的回填一样:当回填区域比数组大时,多余的区域会出现”#N/A”符号,表示没有数据可以回填。

本节知识点回向:数组数据如何回填到工作表?回填的原则是什么?

本专题参考程序文件:004工作表.XLSM

我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:

    以上就是本篇文章【VBA信息获取与处理第四个专题第三节:VBA数组数据回填工作表】的全部内容了,欢迎阅览 ! 文章地址:http://www78564.xrbh.cn/news/32525.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 迅博思语移动站 http://www78564.xrbh.cn/mobile/ , 查看更多   
最新文章
华润三九:2024年,从制药业务结构来看,CHC健康消费品业务实现营收124.82亿元,同比增长14.13%,占营业收入45.20%
证券之星消息,(000999)04月01日在投资者关系平台上答复投资者关心的问题。投资者:您好,请问公司的营收和净利润主要来自于哪项
新手机用到电量剩余多少充电好手机电量剩多少充电最好「新手机用到电量剩余多少充电好」
新手机用到电量剩余多少充电好?与之前的镍电池的“记忆效果”不同的是,锂电池没有记忆功能,即便是新买的手
涉及缴存、提取、贷款!萍乡住房公积金有新调整
为切实缓解缴存职工因重大疾病与家庭变故造成生活严重困难的问题,更好地服务人民群众,决定开通“患重大疾病与家庭变故提取”政
香港推出三大离岛旅游区,规划细节披露
在白泥及尖鼻咀项目中,尖鼻咀可供发展土地面积约为87公顷,白泥则有约33公顷。发言人介绍,计划在该地发展生态旅游及康乐设施、
救市,有了新招数!
1今年3月以来,房地产似乎隐身了,关于房地产的新闻并没有在各大媒体占据多大的版面。但是在沉寂之中,救市的动作从来没有停,支
人生重开模拟器手机版破解版模拟人生手机版「人生重开模拟器手机版破解版」
也许有一些小伙伴对自己现在的生活不满意,生活的压力、工作的压力、学习的压力、经济的压力等等都让自己喘不过气来,但这些都可
终极iPhone长截图教程!好用、免费、无广告!手机怎么截长图「终极iPhone长截图教程!好用、免费、无广告!」
超萌超可爱的【躺倒鸭】第20弹表情包来啦!Hello宝子们,大家好,我是爱搞机的躺倒鸭! 在前几天的稿子中,鸭鸭跟大家说过,iOS
尼尔机械纪元手游机械手机「尼尔机械纪元手游」
尼尔机械纪元手游是一款M级动作手游移植到移动端应该也是有可能的,玩法生动有趣,技能特效酷炫十足,游戏剧情丰富多彩,全新游
手机忘记wifi密码怎么办手机查看wifi密码「手机忘记wifi密码怎么办」
在日常生活中,我们经常会遇到手机忘记WiFi密码的情况。这不仅会影响我们上网冲浪的体验,还可能给智能家居设备的连接带来麻烦。
奢靡成瘾,10年贷款781万元!80后副区长受贿偿贷终自毁!
4月2日,四川省纪委监委官方微信公众号“廉洁四川”发文披露四川省雅安市名山区政府原党组成员、副区长骆毅的贪腐细节。雅安市名