VBA(6)数组基本用法及写入输出

这篇具有很好参考价值的文章主要介绍了VBA(6)数组基本用法及写入输出。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.数组的基本概念就不过多介绍了;本次为基础复习篇:直接上实例备注说明

Option Explicit			'强制声明变量要求		
Sub k1()         		  
    Dim t As Date
    Dim x#, m#
    t = Timer		'当前时间
    For x = 1 To 10000	'以内存形式运行
        m = m + 1000
    Next x
    MsgBox Timer - t
End Sub
Sub k2()
    Dim t As Date
    Dim x#, m#
    t = Timer
    For x = 1 To 10000	'调用单元格运行
        m = m + Cells(1, 1)
        Next x
        MsgBox Timer - t
End Sub

K例在本机测试K1运行时间为1帧不到,K2为16帧左右.故而注:调用内存时运行速度较快,在写宏时应尽量多使用内存/数组运算.

2.数组的写入及输出

Sub a1() 
    t = Timer
    Dim arr(1 To 10)
    Dim x#
    For x = 1 To 10
    arr(x) = x 		'循环数组方式写入数组
    Next
    Stop			'暂时方便查看立即窗口arr是否已写入数组
End Sub
Sub a2() 
    t = Timer
    Dim x#, y#
    Dim arr(1 To 10, 1 To 10)	'二维格式,已知最多可定义60维度,但常用是一维二维
    For x = 1 To 10		'循环将cells写入数组
        For y = 1 To 10
            arr(x, y) = Cells(x, y)
        Next y
    Next x
    Stop
End Sub
Sub a3()
    Dim arr()	 	   '声明动态数组,声明类型留空默认为Variant类型
    Dim y#, x#			
    y = Sheets(1).Range("a65536").End(xlUp).Row - 1		'表1最后一行-1
    ReDim arr(1 To y)			'重新声明ARR
        For x = 1 To y
            arr(x) = Cells(x, 1)
        Next
    Stop
End Sub
Sub a4() 
    Dim arr2()
        arr2 = Array(1, 2, 3, 4, "arr5")	'用函数批量写入
    Stop
End Sub
Sub a5() 
    Dim arr()	
        arr = Range("a1:a5")		'单元格写入
    Stop				'此处暂停查看可得知用单元格写入动态数组默认为一个二维的数组,例a5的arr(1 to 5,1)
    Range("b1:b5") = arr()
End Sub
Sub a6() 
    Dim arr(), arr1(1 To 5, 1 To 1)
    Dim x As Integer
    arr = Range("b2:c6")		
    For x = 1 To ubound(arr,1)			'ubound(数组,2)指定维度的最大上标
        arr1(x, 1) = arr(x, 1) * arr(x, 2)		'ubound(数组)数组上标
    Next					'lbound(数组)数组下标
    Range("d2").Resize(ubound(arr1,1)) = arr1	'读取数组到单元格
End Sub
Sub a7()
    Dim arr, arr1(1 To 5)
    Dim x As Integer
    arr = Range("b2:c6")
    For x = 1 To 5
        arr1(x) = arr(x, 1) * arr(x, 2)
    Next					    '一维数组放入列需转置
    Range("d2").Resize(5) = Application.Transpose(arr1)
End Sub
Sub a8()
    Dim arr, arr1(1 To 1000, 1 To 1)		
    Dim x As Integer
    arr = Range("b2:c6")
    For x = 1 To 5
        arr1(x, 1) = arr(x, 1) * arr(x, 2)		    '数组部分存入
    Next
    Range("d2").Resize(4) = arr1		 '不管数组有多大,单元格赋值只能按单元格区域大小部分
End Sub

'以上几种为数组常见赋值方式,部分版本定义一个变量体可也以将单元格装入(a8例:dim arr)
'Option base 默认下标不改变的情况下:数组声明如果为arr(5)则arr(0 - 5)有6个元素.

3.数组常用函数

Sub s1()
    Dim arr(), arr1()
   'Dim arr(), arr1(1 To 100, 1 To 4)   '可以定义一个足够大的数组,利用区域大小限置输入
    Dim x#, k#
    arr = Range("a1:c3")
    For x = 1 To UBound(arr)                        'ubound(arr) 如果有多维默认= ubound(arr,1)
        If arr(x, 1) = 1 Then                       '如果arr(x,1)第一列的值符合则
        k = k + 1                                   'k为记录行数,
        ReDim Preserve arr1(1 To 3, 1 To k)         'dim preserve arr1()重新声明数组大小;保留原有数值
        arr1(1, k) = arr(x, 1)
        arr1(2, k) = arr(x, 2)
        arr1(3, k) = arr(x, 3)
    End If
    Next
    'Stop
        'ReDim Preserve arr1(1 To 3, 1 To 1)        '测试如减少维度则相对应减少。其他保留值
    Range("e10").Resize(k, 4) = Application.Transpose(arr1)     'Resize扩展多少行多少列,如数组不够单元格区域大则返回错误值#N/A
End Sub
Sub s2()
    Dim arr, arr1(1 To 1000, 1 To 1)    '定义一个足够大的数组
    Dim x#, m#, k#                      '定义三个数值型变量
    arr = Range("a1:a10")               '数据源为{1;2;3;;5;6;;8;9;}
    For x = 1 To UBound(arr)            '上标为10
        If arr(x, 1) <> "" Then         '如果不为空则计数
        k = k + 1
        arr1(k, 1) = arr(x, 1)          '装入新数组
        Else                            '如果为空的则计数
        m = m + 1
        Range("e1").Offset(0, m).Resize(k) = arr1   '将之前连续不为空的数组输出到单元格
        Erase arr1                      '清空数组,使用ERASE语句
        k = 0                           '重置计数
    End If
    Next x
End Sub
'表格内加入一个ActiveX控件:组合框
Private Sub ComboBox1_Change() 	'利用数组将条件要求的数存入控件
    Dim arr(), arr1
    Dim x#, k#
    arr1 = Range("a1:a10")		'装入数组1
        For x = 1 To UBound(arr1)	'数组1循环
            If arr1(x, 1) > 8 Then		'条件设置
            k = k + 1			'计数
            ReDim Preserve arr(1 To k)	'保留原有值重新声明
            arr(k) = arr1(x, 1)		'满足条件的值装入新数组
        End If
    Next x
    ComboBox1.List = arr		'新数组赋值给控件
End Sub
Sub s4()
    Dim sr$, arr
    sr = "A-1-BB-2CD-EFG"
    arr = VBA.Split(sr, "-") 	'split(拆分,分隔符)
    MsgBox Join(arr, "-")  	 'join(合并, 连接符)/join ( arr )第二参数省略情况下默认为空格连接
End Sub
Sub s5()
    Dim arr, arr1, arr2, arr3
    arr = Application.Transpose(Range("a2:a10"))
    arr1 = VBA.Filter(arr, 333, True)                  '数组里面包含333的      filter(数组,关键字,TRUE=包含/FALSE反之)
    arr2 = VBA.Filter(arr, "B", False)                  '数组里面不包含B的
    Range("b2").Resize(UBound(arr1) + 1) = Application.Transpose(arr1)          'filter返回数组为0至上标,故+1=元素个数
    Range("c2").Resize(UBound(arr2) + 1) = Application.Transpose(arr2)          '一维数组输出单元格用Transpose转置
    'Stop                                               '调试时可用暂停查看
End Sub
Sub s6()
    Dim arr, arr1, arr2
    arr = Range("a2:d6")
    arr1 = Application.Index(arr, 0, 1)		'index(二维,0,列数)返回一个二维数
    arr2 = Application.Index(arr, 2, 0)		'index(二维,行数,0)返回一个一维数
    Stop
End Sub
Sub s7()
    Dim arr, arr1, arr2
    arr = Range("a1:B11")
    arr1 = Application.VLookup(Array("B", "A"), arr, 2, 0)      '利用单元格函数返回array("B","A")第一个查找的值的数值arr(1 to 2)
    arr2 = Application.SumIf(Range("a2:a10"), Array("A", "B"), Range("b2:b10"))     '利用sumif返回一个数组
    Stop
End Sub
Sub s8()
    Dim arr, arr1(1 To 3, 1 To 2), x#
    arr1(1, 1) = "A"
    arr1(2, 1) = "B"
    arr1(3, 1) = "C"
    For x = 1 To 100                '循环100行
        Select Case Cells(x, 1)
            Case "A"                '如果为A则累加。下面同理
            arr1(1, 2) = Cells(x, 2) + arr1(1, 2)
            Case "B"
            arr1(2, 2) = Cells(x, 2) + arr1(2, 2)
            Case "C"
            arr1(3, 2) = Cells(x, 2) + arr1(3, 2)
        End Select
    Next
    Stop         '暂停查看得到一个arr1{A,B,C;累加,累加,累加}同sumifs效果的数组
End Sub

'调用工作表函数的情况下运行速度不如VBA函数,常见处理函数ARRAY,SPLIT,JOIN,FILTER,INDEX。文章来源地址https://www.toymoban.com/news/detail-505869.html

到了这里,关于VBA(6)数组基本用法及写入输出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Shell 编程:探索 Shell 的基本概念与用法

    目录 Shell 简介 Shell 脚本 Shell 脚本运行 Shell 变量 1、创建变量和赋值 2、引用变量 3、修改变量的值 4、只读变量 5、删除变量 6、环境变量 Shell 字符串操作 1、拼接字符串 2、字符串长度 3、字符串截取 Shell 数组 1、创建数组 2、访问数组元素 shell 传递参数 1、位置参数 2、特殊

    2024年02月11日
    浏览(47)
  • MySQL 基本概念 基础用法 增删改查(特殊查询)语法 详细篇

    今天来分享一期MySQL的基本用法(增删改查 对库 对表 对值) 目录 MySQL的基础概念  SQL 语言的主要分类 DDL(数据定义语言) DML(数据操控语言) DQL(数据库查询语言) DCL(数据库控制语言) 基础语法 增 库的操作 表操作 列操作 值操作 删 删除库 删除表 删除值 改 修改表名 更新数

    2024年03月16日
    浏览(48)
  • 【C++入门】学习使用二维数组基本知识及用法详解

    🧛‍♂️iecne个人主页: : iecne的学习日志 💡每天 关注 iecne的作品,一起进步 💪一起学习,必看iecne 🐳希望大家多多支持🥰一起进步呀! 二维数组就是在一维数组上多加一个维度。 建议:以下三种定义方式,利用第二种更加直观,提高代码可读性 第二种就是在定义一

    2024年01月25日
    浏览(55)
  • VBA二维数组追加数据

    redim对二维数组扩展时会丢失数据,即使使用Preserve参数,也不行。 如果使用了 Preserve ,就只能重定义数组最末维的大小,且根本不能改变维数的数目。 本例试图解决这样一个问题:从EBS报表中导出Accout弹性域的值,其中文本格式的,有许多题头类的脏数据,必须过滤

    2024年02月16日
    浏览(38)
  • VBA 二维数组查找并定位数据

    数据源:   将这个二维数组导入内存后,存储到一个二维数组里,查找其中一个数组成员,返回其在表格中的地址. 如找44,返回M20

    2024年02月16日
    浏览(36)
  • VBA基本语法及基本使用

    1.准备工作环境 1.1、office的下载 1.2、新建工作环境 打开新建一个Excel表格,后缀名为.xls 或 . xlsm,但是excel默认后缀名为 .xlsx (xlsx不支持宏的定义,其余2种都支持,宏可以理解为不支持写VBA。。。。其实也可以写,就是保存有点问题,最好用其他2种吧) 1.2.1有开发工具选项

    2024年02月04日
    浏览(51)
  • Excel·VBA二维数组组合函数、组合求和

    之前的文章《Excel·VBA数组组合函数、组合求和》和《Excel·VBA数组排列函数》,都是针对 一维数组 的组合和排列 二维数组组合:对一个 m行*n列 的二维数组,每行抽取1个元素进行组合,则共有 n ^ m 个组合 代码思路,类似之前的文章“VBA排列函数”尾数循环的方式 举例 组合

    2024年02月11日
    浏览(51)
  • flink-cdc,clickhouse写入,多路输出

    kafka日志数据从kafka读取 1、关联字典表:完善日志数据 2、判断日志内容级别:多路输出 低级:入clickhouse 高级:入clickhouse的同时推送到kafka供2次数据流程处理。

    2024年02月09日
    浏览(43)
  • 实现对象转成字节数组(整型支持按位写入,字符串则按字节写入)

    闲着无聊,写了一个对象转换成byte[]的工具类,支持整型按位写入(大大节省空间),具体步骤如下: 1. 定义实体类和注解 2. 工具类     3. 测试结果     参考文章: https://www.cnblogs.com/Dotnet9-com/p/17981055

    2024年01月23日
    浏览(48)
  • mysql查询结果命令行方式导出/输出/写入到文件的三种方法

    直接执行命令: 在目录/tmp/下会产生文件test.xls 遇到的问题: 可能原因:mysql没有向/data/下写的权限 查询都自动写入文件: 跳出mysql命令行

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包