vba 单元格区域 数组 VBA数组与单元格区域

VBA数组与单元格区域――简介

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

VBA数组与单元格区域――工具/原料
ExcelVBAVBA数组与单元格区域――方法/步骤

VBA数组与单元格区域 1、

单元格区域:指至少包含两个单元格的区域,单一单元格不属于单元格区域。

如下图所示


VBA数组与单元格区域 2、

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


VBA数组与单元格区域 3、

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


VBA数组与单元格区域 4、

当将单元格区域转换为VBA数组时,该数组变量必须是Variant类型,生成的数组是二维数组,下界是1,不受Option Base语句的影响。二维是先垂直后水平,第一维是单元格区域的行方向,第二维是单元格区域的列方向。如下所示:

Sub xyf()

'定义一个变量用于存放单元格区域的值

'未指定类型默认为Variant类型

Dim arr

arr = Range("a1:a2")

'也可以先定义一个Variant类型的动态数组变量

Dim arr1()

arr1 = Range("a1:a2")

'生成的数组的维数为(1 to 2,1 to 1)

End Sub

如下图所示

VBA数组与单元格区域_vba数组


VBA数组与单元格区域 5、

由Array函数生成的数组是一维水平数组,可以直接赋值给水平的单元格区域。如下所示:

Sub xyf()

Dim arr()

arr = Array(1, 2, 3)

Range("a1:c1") = arr

End Sub

如下图所示


VBA数组与单元格区域 6、

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


VBA数组与单元格区域 7、

当将单列多行的单元格区域赋值给数组变量后,可以用Application.WorksheetFunction.Transpose转置降为一维水平数组。如下所示:

Sub xyf()

Dim arr()

'以下语句产生二维的arr(1 to 8,1 to 1)数组

arr = Range("a1:a8")

'通过转置降为一维的arr(1 to 8) 数组

arr = Application.WorksheetFunction.Transpose(arr)

End Sub

如下图所示

VBA数组与单元格区域_vba数组


VBA数组与单元格区域 8、

当将单行多列的单元格区域赋值给数组变量后,可以两次使用Application.WorksheetFunction.Transpose将数组降为一维水平数组。如下所示:

Sub xyf()

Dim arr()

'以下语句产生二维的arr(1 to 1,1 to 3)数组

arr = Range("a1:c1")

'通过两次转置降为一维的arr(1 to 3) 数组

arr = Application.WorksheetFunction.Transpose(Application.WorksheetFunction.Transpose(arr))

End Sub

如下图所示


VBA数组与单元格区域 9、

当将多行多列的单元格区域赋值给数组变量后,可以用Application.WorksheetFunction.Index函数的行参数将二维数组的每行转换为一维水平数组,如下所示:

Sub xyf()

Dim arr()

Dim arrTemp()

'以下语句产生二维的arr(1 to 5,1 to 3)数组

arr = Range("a1:c5")

'定义一个与arr数组一维尺寸相同的一维数组变量用于存放提取出来的每行一维数组的结果

ReDim arrTemp(1 To UBound(arr))

For i = 1 To UBound(arr)

'Application.WorksheetFunction.Index函数的第二参数指定行数生成一维数组

arrTemp(i) = Join(Application.WorksheetFunction.Index(arr, i), ",")

Next

End Sub


VBA数组与单元格区域 10、

Application.WorksheetFunction.Index函数将二维数组降维时,只有通过行参数才可以直接降维,通过列参数不能直接降维,如下所示:

Sub xyf()

Dim arr()

Dim arrTemp()

vba 单元格区域 数组 VBA数组与单元格区域

'以下语句产生二维的arr(1 to 5,1 to 3)数组

arr = Range("a1:c5")

'生成一维数组(1 to 3)

arrTemp = Application.WorksheetFunction.Index(arr, 1)

'生成一维数组(1 to 3)

arrTemp = Application.WorksheetFunction.Index(arr, 1, 0)

'通过Index的列参数不能降维 , arrTemp还是二维数组(1 to 5,1 to 1)

arrTemp = Application.WorksheetFunction.Index(arr, 0, 1)

End Sub

VBA数组与单元格区域――注意事项
如果这篇文章对您有所帮助,请为这篇文章投票,谢谢。

  

爱华网本文地址 » http://www.aihuau.com/a/8104560103/301661.html

更多阅读

二维数组与数组指针的用法 二维数组指针传递

二维数组与数组指针的用法 严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。既然指针变量的值是一个地址,那么这个地址不仅可以是变量的地址,也可以是其它数据结构

九宫格技巧 数独九宫格技巧

填九宫格3*3有什么技巧吗?口诀1:戴九履一,右三左七,二四为肩,六八为足。口诀2:“一居上行正中央,依次斜填切莫忘;上出框时向下放,右出框时向左放;排重便在下格填,右上排重一个样。”这口诀不仅适用于九宫,也适用于推广的奇数九宫,如五五图,七七

今日Linux--变量键盘读取、数组与宣告:read,array,declare

我们上面提到的变量设定功能,都是由指令列直接设定的,那么,可不可以让用户能够经由键盘输入? 什么意思呢?是否记得某些程序执行的过程当中,会等待使用者输入 "yes/no" 之类的讯息啊? 在 bash里面也有相对应的功能喔!此外,我们还可以宣告这个

香格里拉古城(组图) 从丽江古城到香格里拉

香格里拉古城中心广场当天下午( 10月22日)我们赶到了香格里拉古城。云南有很多古城,最出名的当属丽江的大研古城,其次是大理古城,我们抵达的香格里拉古城,实际是茶马古道上的“建塘古城”,不太为世人所知。香格里拉新城毗邻而建,规模不大,

C语言指针 一维数组与指针概念 一维数组和指针

C语言学习笔记----指针【一】虽然以前学过C语言,但是那个时候才大一,没有认真的学习,最近又回炉看了好久的指针,把我的经验心得写下来和大家一起分享,共同学习。指针变量(1) 指针就是内存地址;系统对变量的访问形式有两种:直接访问:按变量地址

声明:《vba 单元格区域 数组 VBA数组与单元格区域》为网友赤炼霸王分享!如侵犯到您的合法权益请联系我们删除