广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >VBA数组用法案例详解
  • 427
分享到

VBA数组用法案例详解

2024-04-02 19:04:59 427人浏览 八月长安
摘要

目录前言具体操作1、VBA数组的定义方法2、数组的赋值和计算3、数组的合并(join)与拆分(split)4、数组的筛选(Filter)5、数组维度的转换(Transpose)6、利

前言

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)
    Next
Next
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)
 Next
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
Next
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
Next
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
Next
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
Next
Range("a1:a30000").Value = arr
MsgBox "程序运行时间为" & Format(Timer - start, "0.00") & "秒"
End Sub

总结

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

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

--结束END--

本文标题: VBA数组用法案例详解

本文链接: https://www.lsjlt.com/news/133285.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • VBA数组用法案例详解
    目录前言具体操作1、VBA数组的定义方法2、数组的赋值和计算3、数组的合并(join)与拆分(split)4、数组的筛选(Filter)5、数组维度的转换(Transpose)6、利...
    99+
    2022-11-12
  • python兼容VBA的用法详解
    一、简介 有时我们需要向含有VBA代码的Excel写入数据,但又不能影响正常的VBA代码执行,起初我使用python的openpyxl模块中函数将数据写入xlsm文件中,写入数据后发...
    99+
    2022-11-12
  • C++ atoi()函数用法案例详解
    目录1 功能2 格式3 注意事项3.1 关于参数的注意事项3.2 关于返回值的注意事项3.3 判断转换是否成功4 宽字符的转换1 功能 atoi()函数将数字格式的字符串转换为整数类...
    99+
    2022-11-12
  • C++ assert()函数用法案例详解
    1. 简介 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。 原型定义: #include <assert.h&...
    99+
    2022-11-12
  • C++ seekg函数用法案例详解
    C++ seekg函数用法详解 很多时候用户可能会这样操作,打开一个文件,处理其中的所有数据,然后将文件倒回到开头,再次对它进行处理,但是这可能有点不同。例如,用户可能会要求程序在数...
    99+
    2022-11-12
  • CRITICAL_SECTION用法案例详解
          很多人对CRITICAL_SECTION的理解是错误的,认为CRITICAL_SECTION是锁定了资源,其实,CRITICAL_SECTI...
    99+
    2022-11-12
  • Vue子组件调用父组件方法案例详解
    一、直接在子组件中通过this.$parent.event来调用父组件的方法 <!-- 父组件 --> <template> <div> ...
    99+
    2022-11-12
  • C语言指针数组案例详解
    指针与数组是 C 语言中很重要的两个概念,它们之间有着密切的关系,利用这种 关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之 间的联系及在编程中的应用。 1.指...
    99+
    2022-11-12
  • Python threading Local()函数用法案例详解
    目录前言local() 函数是什么?local()函数如何用?1. 不做标记,不做隔离2.使用local()函数加以控制3. 模拟实现local()的功能,创建一个箱子4. 简化代码...
    99+
    2022-11-12
  • C++ 转换函数用法案例详解
    1.标准数据之间会进行隐式类型安全转换,规则如下:  在这里主要探讨c++中类类型与普通类型的转换: 1.类类型转换普通类型 class Fraction { pub...
    99+
    2022-11-12
  • CSS hack用法案例详解
    之前一直很狭隘的对CSS hack持有偏见,觉得写得规范的代码不应该使用这些“邪门歪道”,可最近产品发布一个小问题却让我头疼了很久,最后查了一下资料,竟然使用CSS hack轻松解决...
    99+
    2022-11-12
  • Java Scanner用法案例详解
    一、Scanner类简介       Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。它是以前...
    99+
    2022-11-12
  • Java SPI用法案例详解
     1.什么是SPI      SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接...
    99+
    2022-11-12
  • C++ cin.get用法案例详解
    与字符串输入一样,有时候使用 cin>> 读取字符也不会按我们想要的结果行事。 例如,因为它会忽略掉所有前导白色空格,所以使用 cin>> 就不可能仅输入一个...
    99+
    2022-11-12
  • C++ template用法案例详解
    有必要记一下这种一眼看上去就很高级的用法。还是编程不够多。都没用过这个。 相信用过c++的人,即便没用过,也肯定都听说过模板类这个词。嗨不巧了,今天讲的就是模板类。 模板是c++支持...
    99+
    2022-11-12
  • Java ConcurrentHashMap用法案例详解
    一、概念 哈希算法(hash algorithm):是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。 哈希表(hash table):根据设定的哈希函数H(k...
    99+
    2022-11-12
  • Vue.js $refs用法案例详解
    尽管有 prop 和事件,但是有时仍然需要在 JavaScript 中直接访问子组件。为此可以使用 ref 为子组件指定一个引用 ID。 ref 为子组件指定一个引用 ID,使父组件...
    99+
    2022-11-12
  • C# Console.WriteLine()用法案例详解
    以前用Console.WriteLine()的时候就只会用它直接输出string字符串,但后来发现它还有其它在有些场合下会十分方便的输出方法,这篇就记录一下这些方法的使用吧。 代码格...
    99+
    2022-11-12
  • C++ ostream用法案例详解
    概述 在 C++中,ostream表示输出流,英文”output stream“的简称。在 C++中常见的输出流对象就是标准输出流cout,很少自定义ostream的对象,更多的是直...
    99+
    2022-11-12
  • C# Request.Form用法案例详解
    在CS文件中获得对应页面中的下拉框DropDownList_sitebranch值可以有以下几种方法获得: siteInfo.FZJGID = DropDownList_site...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作