百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

Excel中使用VBA你不可不知道的使用数组,干货分享

liebian365 2024-11-21 17:37 18 浏览 0 评论

概述

VBA数组是用于存储一组相同类型的变量的结构,数组中的每个元素都可以通过一个索引号进行访问。

声明数组

例如,假设一个团队有20名成员,你想要存储所有成员的名字,以便在VBA代码中使用,可以声明20个变量来保存他们的名字,如下所示:

或者,更简单、更聪明的方法是将团队成员的名字存储在一个由20个字符串变量组成的数组中:

一旦声明了数组,则可以按如下方式为每个数组元素赋值:

把数据存储在数组中而不是单个变量中的另一个好处是可以对每个成员执行相同的操作。如果团队成员的姓名存储在20个单独的变量中,则需要20行代码才能对每个名称执行特定的操作。但是,如果存储在数组中,则可以使用一个简单的循环对数组中的每个元素执行这些操作。

下面的示例代码展示了这一点,该代码将Team_Members数组中的每个名字打印到Excel当前工作表的A列:

虽然只有20个名字,使用数组的优势也是显而易见的,但是想象一下,如果要存储1000个名字呢,再想象一下你想把姓氏和名字分开储存呢?如果不在VBA代码中使用数组,很快就几乎不可能处理如此多的数据。

声明多维数组

上面讨论的数组是一维的,它所引用一个名字列表。但是,数组可以有多个维度。具有两个维度的数组可以看作是一个值的网格。

例如,假设要存储5个不同团队1月份的每日销售数据。你需要一个二维数组,由5组数字组成,历时31天。声明二维数组,如下所示:

为了访问二维数组Jan_Sales_Figues中的元素,需要使用两个索引,分别是日期和团队编号。例如,Team2在1月15日的销售数据的引用方式为:

你可以用3个或更多的维度来声明数组,只需在声明中添加多一个维度,访问多维数组元素时也要多使用一个索引来引用相应的数组项。

省略下限

上面的部分已经给出了一些数组声明的例子,但是值得进一步讨论。如上所示,一维数组可以声明如下:

此声明告诉VBA编译器数组Team_Members有20个变量,这些变量由索引1到20来引用。但是,我们也可以决定使用索引0到19的来引用这20个变量,在这种情况,声明格式如下:

实际上,数组索引默认是从0开始,因此可以在声明中省略起始索引,而只需将数组声明为:

此时,VBA编译器将其理解为一个由20个变量组成的数组,这些变量的索引从0到19。

同样的规则也适用于多维数组的声明。如前一个示例所示,通过用逗号分隔维度索引来声明二维数组:

但是,如果我们忽略两个维度的起始索引,如下所示:

这也被理解为二维数组,其中第一维度有32个条目,索引范围从0到31,第二维度有6个条目,索引范围从0到5。

动态数组

在上面的例子中,数组的维数都是固定的。但是,在许多情况下,运行代码前你可能不知道数组的大小。解决这个问题的一种方法是声明一个巨大的数组,试图覆盖所需的最大可能大小,但这会大量占用不必要的内存,并可能会减慢程序的速度。一个更好的选择是使用动态数组,它是一个数组,但在执行期间,它可以根据需要调整大小而且反复重新调整。

动态数组用空括号声明,如下所示:

然后,在代码执行期间,使用ReDim语句重新声明数组所需的维数:

如果在需要继续扩展数组的大小时,可以再次使用ReDim:

应该注意的是,以这种方式动态调整数组的大小将导致之前存储在数组中的所有值丢失。如果要避免这种损失,保留以前分配的值,则需要使用Preserve关键字,如下所示:

在调整数组大小时使用Preserve关键字的缺点是只能更改数组的上限,而不能更改下限。另外,如果您有一个多维数组,Preserve关键字的使用会限制只更改数组的最后一个维度。

结论

这就是VBA中关于数组的使用,希望你喜欢这篇文章,请在评论中分享反馈!

相关推荐

“版本末期”了?下周平衡补丁!国服最强5套牌!上分首选

明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...

VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"

首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...

东营交警实名曝光一批酒驾人员名单 88人受处罚

齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...

Qt界面——搭配QCustomPlot(qt platform)

这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...

大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写

老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...

测试谷歌VS Code AI 编程插件 Gemini Code Assist

用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...

顾爷想知道第4.5期 国服便利性到底需优化啥?

前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...

掌握Visual Studio项目配置【基础篇】

1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...

还嫌LED驱动设计套路深?那就来看看这篇文章吧

随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...

Visual Studio Community 2022(VS2022)安装图文方法

直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...

Qt添加MSVC构建套件的方法(qt添加c++11)

前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...

Qt为什么站稳c++GUI的top1(qt c)

为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...

qt开发IDE应该选择VS还是qt creator

如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...

Qt 5.14.2超详细安装教程,不会来打我

Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...

Cygwin配置与使用(四)——VI字体和颜色的配置

简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...

取消回复欢迎 发表评论: