养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

VBA数组与单元格区域

时间:2024-09-26 04:21:34

在用VBA批量操作Excel工作表单元格区域时,会遇到需要将单元格区域转换为VBA数组。同样,当需要将VBA数组输出到单元格区域时,也会遇到类似的转换。本文将对VBA数组与单元格区域的相互转换进行介绍。

工具/原料

Excel

VBA

方法/步骤

1、单元格区域:指至少包含两个单元格的区域,单一单元格不属于单元格区域。如下图所示

VBA数组与单元格区域

2、一维水平数组:指数组的值在Excel单元格区域中水平输出,也就是按Excel列的方向输出。如下图所示

VBA数组与单元格区域

3、一维垂直数组:指数组的值在Excel单元格区域中垂直输出,也就是按Excel行的方向输出。如下图所示

VBA数组与单元格区域

4、当将单元格区域转换为VBA数组时,该数组筐毙险裆变量必须是Variant类型,生成的数组是二维数组,下界是1,不受Opti泠贾高框onBase语句的影响。二维是先垂直后水平,第一维是单元格区域的行方向,第二维是单元格区域的列方向。如下所示:Subxyf()'定义一个变量用于存放单元格区域的值'未指定类型默认为Variant类型Dimarrarr=Range("a1:a2")'也可以先定义一个Variant类型的动态数组变量Dimarr1()arr1=Range("a1:a2")'生成的数组的维数为(1to2,1to1)EndSub如下图所示

VBA数组与单元格区域

VBA数组与单元格区域

5、由Array函数生成的数组是一维水平数组,可以直接赋值给水平的单元格区域。如下所示:Subxyf()Dimarr()arr=Array(1,2,3)Range("a1:c1")=arrEndSub如下图所示

VBA数组与单元格区域

6、由于将单元格区域转换为VBA数组时,产生的数组是二维数组,而内置的VBA数组函数都是针对一维数组,所以需要将二维数组降维转换为一维数组。

7、当将单列多行的单元格区域赋值给数组变量后,可以用Application.WorksheetFunction.Transpose转置降为一维水平数组。如下所示:Subxyf()Dimarr()'以下语句产生二维的arr(1to8,1to1)数组arr=Range("a1:a8")'通过转置降为一维的arr(1to8)数组arr=Application.WorksheetFunction.Transpose(arr)EndSub如下图所示

VBA数组与单元格区域

VBA数组与单元格区域

8、当将单行多列的单元格区域赋值给数组变量后,可以两次使用Application.WorksheetFunction.Transpose将数组降为一维水平数组。如下所示:Subxyf()Dimarr()'以下语句产生二维的arr(1to1,1to3)数组arr=Range("a1:c1")'通过两次转置降为一维的arr(1to3)数组arr=Application.WorksheetFunction.Transpose(Application.WorksheetFunction.Transpose(arr))EndSub如下图所示

VBA数组与单元格区域

9、当将多行多列的单元格区域赋值给数组变量后水貔藻疽,可以用Application.WorksheetFunction.Index函数鹚兢尖睁的行参数将二维数组的每行转换为一维水平数组,如下所示:Subxyf()Dimarr()DimarrTemp()'以下语句产生二维的arr(1to5,1to3)数组arr=Range("a1:c5")'定义一个与arr数组一维尺寸相同的一维数组变量用于存放提取出来的每行一维数组的结果ReDimarrTemp(1ToUBound(arr))Fori=1ToUBound(arr)'Application.WorksheetFunction.Index函数的第二参数指定行数生成一维数组arrTemp(i)=Join(Application.WorksheetFunction.Index(arr,i),",")NextEndSub

10、Application.Worksh娣定撰钠eetFunction.Index函数将二维数组降维时,只有通过行参数才绺从萦米可以直接降维,通过列参数不能直接降维,如下所示:Subxyf()Dimarr()DimarrTemp()'以下语句产生二维的arr(1to5,1to3)数组arr=Range("a1:c5")'生成一维数组(1to3)arrTemp=Application.WorksheetFunction.Index(arr,1)'生成一维数组(1to3)arrTemp=Application.WorksheetFunction.Index(arr,1,0)'通过Index的列参数不能降维,arrTemp还是二维数组(1to5,1to1)arrTemp=Application.WorksheetFunction.Index(arr,0,1)EndSub

© 一点知识