下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 VBA入门VBA 数组入门VBA数组入门

VBA入门VBA 数组入门VBA数组入门.doc

VBA入门VBA 数组入门VBA数组入门

地球只有1个
2018-09-07 0人阅读 举报 0 0 暂无简介

简介:本文档为《VBA入门VBA 数组入门VBA数组入门doc》,可适用于文档模板领域

VBA数组入门一、初识数组、数组就是一个列表或一组数据表。我们学习数组的目的就是为了加速我们代码的效率。、我们如何运用数组呢?首先必须声明数组。其次给数组赋值可以是经过一系列的运算后再赋值给数组。最后将数组返回到工作表区域中。最终的目的是在工作表中显示我们想要的结果。、调试数组的手段:本地窗口我们可以通过设置Stop语句或F逐步执行代码在本地窗口中观测数组的变化。Subtest()DimarrSheetName()AsStringStopEndSub、数组的优势与不足数组的速度优势是明显的但不足也很明显因为数组处理的都是数据因此它不能给EXCEL数据添加颜色删除行列插入行列等等动作。、VBA数组没有内存数组和一般数组之分。我们在声明数组时就已经将数组写入内存里。二、声明数组、声明一个数组变量也是用Dim语句来声明。当声明了一个数组便决定了这个数组用于存储数据所用的内存空间。DimarrCnt()AsIntegerDimarrSheetName()AsStringDimarr()AsVariant)、这里我们看到与一般定义不同的是多了个带括号的数字。这个数字就是这个数组所能存储的最大元素数。)、数组可以根据我们的需要存储不同类型的数据这与我们平常变量定义的类型一样可以是IntegerLongStringVariant等等。、注意上面定义数组的例子是静态数组所以我们在声明数组时就决定了数组用于存储数据所用的内存空间大小。后面我们会讲到动态数组。三、数组的上界和下界、VBA中数组默认的下界是也就是OptionBase如果我们习惯了用作为我们的下界可以强制声明:OptionBase注:OptionBase()必须放在所有模块之前。、当然我们也可以忽略这个强制声明那我们就需要在声明数组时指明数组的上界和下界如:DimarrSheetName(to)asString表明这个数组的上下界分别是和。四、静态数组和动态数组我们之前所定义的数组都是静态数组。静态数组的特点是具有大小的数组。当我们事先知道数组的大小那么我们可以直接声明为静态数组。如果我们不知道数组大小那么我们应定义成动态数组。、动态数组是可以改变大小的数组通过在数组名称后附带空括号来声明如:DimarrSheetName()asString、在定义动态数组之后必须使用ReDim来设置动态数组的上界和下界为数组重新分配存储空间。、我们可以使用ReDim语句反复地改变数组的元素已经维数。Subarr()Dimarr()AsLongDimiAsLongReDimarr(To)Fori=Toarr(i)=iNextSheetaResize(,)=arrStopReDimarr(To)Fori=Toarr(i)=iNextSheetaResize(,)=arrEndSub、ReDimPreserve语句Preserve英文的意思是保留保存。顾名思义就是重新定义数组时将数组元素保留在数组中。与ReDim不同的是使用了ReDimPreserve只能通过改变上界即最末维的大小来改变数组的大小且不能改变数组维数。如果改变了下界就会出现错误信息。例子见后面的过程Join。五、一维数组和多维数组我们前面所举的例子都是一维数组数组可以定义多达维。但我们很少看到多过维的代码。这也是因为对于Excel的工作表来说行和列就是表示维我们处理的数据区域很多都是围绕行和列进行处理。因此我们只要掌握的二维数组就掌握了对Excel的数据处理。下面通过幅图来理解二维数组:、定义一个二维数组DimarrSource(to,to)AsLong、定义一个三维数组DimarrSource(To,To,To)AsLong注:我们可以通过节点的多少来判断数组维数。六、数组函数、Array函数返回一个包含数组的Variant。Array函数在运行代码执行期间创建数组而不必事先知道数组的大小。SubArray()DimarrAsVariantarr=Array(,,)MsgBoxarr()EndSub、Lbound、Ubound函数LBound函数:返回一个Long型数据其值为指定的数组维可用的最小下标。UBound函数:返回一个Long型数据其值为指定的数组维可用的最大下标。SubULbound()DimarrAsVariantarr=Array(,,)MsgBoxUBound(arr)MsgBoxLBound(arr)EndSubSubULbound()Dimarr(To,To,To)AsIntegerMsgBoxUBound(arr,)MsgBoxUBound(arr,)MsgBoxLBound(arr,)EndSub、Split函数返回一个下标从零开始的一维数组它包含指定数目的子字符串。语法:Split(expression,delimiter,limit,compare)expression必需的。包含子字符串和分隔符的字符串表达式。如果expression是一个长度为零的字符串("")Split则返回一个空数组即没有元素和数据的数组。delimiter可选的。用于标识子字符串边界的字符串字符。如果忽略则使用空格字符("")作为分隔符。如果delimiter是一个长度为零的字符串则返回的数组仅包含一个元素即完整的expression字符串。limit可选的。要返回的子字符串数–表示返回所有的子字符串。compare可选的。数字值表示判别子字符串时使用的比较方式。关于其值请参阅“设置值”部分。SubSplit()DimstrJoinAsStringDimarrSplitAsVariantstrJoin="a,b,c"arrSplit=Split(strJoin,",")SheetaResize(,)=arrSplitEndSub、Join函数返回一个字符串该字符串是通过连接某个数组中的多个子字符串而创建的。语法:Join(sourcearray,delimiter)sourcearray必需的。包含被连接子字符串的一维数组。delimiter可选的。在返回字符串中用于分隔子字符串的字符。如果忽略该项则使用空格("")来分隔子字符串。如果delimiter是零长度字符串("")则列表中的所有项目都连接在一起中间没有分隔符。SubJoin()DimstrJoinAsStringstrJoin=Join(Array("a","b","c"),",")MsgBoxstrJoinEndSub、Filter函数返回一个下标从零开始的数组该数组包含基于指定筛选条件的一个字符串数组的子集。语法:Filter(sourcesrray,match,include,compare)sourcearray必需的。要执行搜索的一维字符串数组。match必需的。要搜索的字符串。include可选的。Boolean值表示返回子串包含还是不包含match字符串。如果include是TrueFilter返回的是包含match子字符串的数组子集。如果include是FalseFilter返回的是不包含match子字符串的数组子集。compare可选的。数字值表示所使用的字符串比较类型。有关其设置请参阅下面的“设置值”部分。‘查找数组的差集SubFilter()DimvarArrAsVariantDimvarArrAsVariantDimiAsIntegervarArr=Array(,,)varArr=Array(,,,,,,,)Fori=ToUBound(varArr)varArr=VBAFilter(varArr,varArr(i),False)NextiMsgBoxJoin(varArr)EndSub注意filter函数在此是模糊查找下面代码将无法返回我们想要的值SubFilter()DimvarArrAsVariantDimvarArrAsVariantDimiAsIntegervarArr=Array(,,)varArr=Array(,,,,,,,)Fori=ToUBound(varArr)varArr=VBAFilter(varArr,varArr(i),False)NextiMsgBoxJoin(varArr)EndSub七、释放数组在某些情况下我们根据需要来释放数组来重新定义数组或避免数据堆栈。Erase语句重新初始化大小固定的数组元素以及释放动态数组的存储空间。即Erase可以删除静态数组和动态数组里的数据元素。SubErase()Dimarr(To)AsIntegerarr()=MsgBoxarr()MsgBoxUBound(arr)ErasearrMsgBoxarr()MsgBoxUBound(arr)EndSub从上面的代码中我们可以看到Erase语句用于清除数组元素对静态数组维数和上标是没有改变的。而对于动态数组Erase语句在释放动态数组所使用的内存后。在下次引用该动态数组之前程序必须使用ReDim语句来重新定义该数组变量的维数。SubErase()Dimarr()AsIntegerReDimarr(To)arr()=MsgBoxarr()MsgBoxUBound(arr)Erasearr'ReDimarr(To)MsgBoxarr()MsgBoxUBound(arr)EndSub八、数组与单元格区域通过上面的几个概念我们明白了数组的定义、赋值。我们最终的目的是通过数组来操作工作表区域中的数据下面我们通过几个例子来进一步理解数组。、将单元格区域赋值给数组见过程RangeArrayRangeArrayRangeArray、拆分合并特定单元格数据见过程Split,Join,Split、维数转置见过程RangeArray九、数组实例、提取不重复数据。见UniqueData过程、转置数据区域。见TransposeData过程上面就是我们入门数组需要学习和理解的内容谢谢大家!HOmT于北京

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/9

VBA入门VBA 数组入门VBA数组入门

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利