VBA数组用法案例详解

作者:天涯海角路

这篇文章主要介绍了VBA数组用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

VBA数组在Excel开发应用中,作用还是很明显的,用好数组可以提高工作效率,下面就开始揭开VBA数组的神秘面纱。

1、VBA数组的定义方法

下面是几种数组常用的定义方法,一维数组的定义、二维数组的定义

直接赋值定义、调用Array函数定义、调用Excel工作表内存数组

''''''''''''直接定义给数组赋值 '一维常量数组的定义 Sub arrDemo1() Dim arr(2) As Variant '数组 arr(0) = "vba" arr(1) = 100 arr(2) = 3.14 MsgBox arr(0) End Sub '二维常量数组的定义 Sub arrDemo2() Dim arr(1, 1) As Variant 'Dim arr(0 To 1, 0 To 1) As Variant arr(0, 0) = "apple" arr(0, 1) = "banana" arr(1, 0) = "pear" arr(1, 1) = "grape" For i = 0 To 1 For j = 0 To 1 MsgBox arr(i, j) End Sub ''''''''''''用array函数创建常量数组 '一维数组 Sub arrayDemo3() Dim arr As Variant '数组 arr = Array("vba", 100, 3.14) MsgBox arr(0) End Sub '二维数组 Sub arrayDemo4() Dim arr As Variant '数组 arr = Array(Array("张三", 100), Array("李四", 76), Array("王五", 80)) MsgBox arr(1)(1) End Sub '调用Excel工作表内存数组 ' 一维数组[{"A",1,"C"}] '二维数组[{"a",10;"b",20;"c",30}] Sub mylook() Dim arr arr = [{"a",10;"b",20;"c",30}] Range("a1:b3") = arr MsgBox Application.WorksheetFunction.VLookup("b", arr, 2, 0) '调用vlookup时可以作为第二个参数 End Sub '动态数组的定义方法 Sub arrDemo5() Dim arr1() '声明一个动态数组(动态指不固定大小) Dim arr2 '声明一个Variant类型的变量 arr1 = Range("a1:b2") '把单元格区域A1:B2的值装入数组arr1 arr2 = Range("a1:b2") '把单元格区域A1:B2的值装入数组arr2 MsgBox arr1(1, 1) '读取arr数组中第1行第1列的数值 MsgBox arr2(2, 2) '读取arr1数组的第2行第2列的数值 End Sub

2、数组的赋值和计算

'读取单元格数据到数组,进行计算,再赋值给单元格 Sub arr_calculate() Dim arr '声明一个变量用来盛放单元格数据 Dim i% arr = Range("a2:d5") '把单元格数据搬入到arr里,它有4列4行 For i = 1 To 4 '通过循环在arr数组中循环 arr(i, 4) = arr(i, 3) * arr(i, 2) '数组的第4列(金额)=第3列*第2例 Next i Range("a2:d5") = arr '把数组放回到单元格中 End Sub

3、数组的合并(join)与拆分(split)

'数组合并(join)与拆分(Split) Sub join_demo() Dim a As Variant Dim b As Variant ' Join using spaces a = Array("Red", "Blue", "Yellow") b = Join(a, "") MsgBox ("The value of b is :" & b) 'Red Bule Yellow ' Join using $ b = Join(a, "$") 'Red$Bule$Yellow MsgBox ("The Join result after using delimiter is : " & b) End Sub Sub split_demo() Dim a As Variant Dim b As Variant a = Split("Red$Blue$Yellow", "$") 'a = Array("red","blue","yellow") b = UBound(a) For i = 0 To b MsgBox a(i) End Sub

4、数组的筛选(Filter)

'vba数组的筛选 Sub arr_filter() arr = Array("ABC", "F", "D", "CA", "ER") arr1 = VBA.Filter(arr, "A", True) '筛选所有含A的数值组成一个新数组 arr2 = VBA.Filter(arr, "A", False) '筛选所有不含A的数值组成一个新数组 MsgBox Join(arr1, ",") '查看筛选的结果 End Sub

5、数组维度的转换(Transpose)

'数组维数的转换 '一维转二维 Sub arr_tranpose1() arr = Array(10, "vba", 2, "b", 3) arr1 = Application.Transpose(arr) MsgBox arr1(2, 1) '转换后的数组是1列多行的二维数组 End Sub '二维数组转一维 '注意:在转置时只有1列N行的数组才能直接转置成一维数组 Sub arr_tranpose2() arr2 = Range("A1:B5") arr3 = Application.Transpose(Application.Index(arr2, , 2)) '取得arr2第2列数据并转置成1维数组 MsgBox arr3(4) End Sub '把单元格中的内容用“-”连接起来 Sub join_transpose_demo() arr = Range("A1:C1") arr1 = Range("A1:A5") MsgBox Join(Application.Transpose(Application.Transpose(arr)), "-") MsgBox Join(Application.Transpose(arr1), "-") End Sub

6、利用数组获取所有工作表名称的自定义函数

'利用数组获取所有工作表名称的自定义函数 Function getSheetsname(id) Dim i%, arr() k = Sheets.Count ReDim arr(1 To k) For i = 1 To k arr(i) = Sheets(i).Name getSheetsname = Application.Index(arr, id) End Function

7、数组赋值,提高计算效率

'数组赋值,提高计算效率 '2.03秒 Sub dataInput() Dim start As Double start = Timer Dim i& For i = 1 To 30000 Cells(i, 1) = i MsgBox "程序运行时间为" & Format(Timer - start, "0.00") & "秒" End Sub '0.12秒 Sub dataInputArr() Dim start As Double start = Timer Dim i&, arr(1 To 30000) As String For i = 1 To 30000 arr(i) = i Range("a1:a30000").Value = Application.Transpose(arr) MsgBox "程序运行时间为" & Format(Timer - start, "0.00") & "秒" End Sub '0.09秒 Sub dataInputArr2() Dim start As Double start = Timer Dim i&, arr(1 To 30000, 1 To 1) As String For i = 1 To 30000 arr(i, 1) = i Range("a1:a30000").Value = arr MsgBox "程序运行时间为" & Format(Timer - start, "0.00") & "秒" End Sub

VBA数组还是很强大的,通过对单元格区域数据的读取,赋值给数组,再利用数组函数或者调用Excel内置函数进行相关处理。另外,数组在赋值计算效率上面也是非常高的,大家可以自行尝试下。

到此这篇关于VBA数组用法案例详解的文章就介绍到这了,更多相关VBA数组用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • VB6实现连接Access数据库的ADODB代码实现方法
    VB6实现连接Access数据库的ADODB代码实现方法
    2014-07-07
  • VB6.0 支持鼠标滚轮教程
    VB6.0 支持鼠标滚轮教程
    2014-10-10
  • VB的32位程序在64位系统中出现文件和注册表自动转向的解决方法
    VB的32位程序在64位系统中出现文件和注册表自动转向的解决方法
    2014-07-07
  • VB关机恶搞小程序
    VB关机恶搞小程序
    2015-09-09
  • VBA数组用法案例详解
    VBA数组用法案例详解
    2015-09-09
  • 浅谈如何使用vb.net从数据库中提取数据
    浅谈如何使用vb.net从数据库中提取数据
    2015-09-09
  • 使用WMI得到计算机的信息
    使用WMI得到计算机的信息
    2015-09-09
  • VB中使用WMI获取系统硬件和软件有关信息
    VB中使用WMI获取系统硬件和软件有关信息
    2015-09-09
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号