请选择 进入手机版 | 继续访问电脑版

[vb] VBA数组用法案例详解

  [复制链接]
查看178 | 回复54 | 2021-9-12 05:03:05 | 显示全部楼层 |阅读模式
目次

前言

VBA数组在Excel开辟 应用中,作用还是很显着 的,用好数组可以进步 工作服从 ,下面就开始揭开VBA数组的秘密 面纱。

具体 操作

1、VBA数组的定义方法

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

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

  1. ''''''''''''直接定义给数组赋值
  2. '一维常量数组的定义
  3. Sub arrDemo1()
  4. Dim arr(2) As Variant '数组
  5. arr(0) = "vba"
  6. arr(1) = 100
  7. arr(2) = 3.14
  8. MsgBox arr(0)
  9. End Sub
  10. '二维常量数组的定义
  11. Sub arrDemo2()
  12. Dim arr(1, 1) As Variant 'Dim arr(0 To 1, 0 To 1) As Variant
  13. arr(0, 0) = "apple"
  14. arr(0, 1) = "banana"
  15. arr(1, 0) = "pear"
  16. arr(1, 1) = "grape"
  17. For i = 0 To 1
  18. For j = 0 To 1
  19. MsgBox arr(i, j)
  20. Next
  21. Next
  22. End Sub
  23. ''''''''''''用array函数创建常量数组
  24. '一维数组
  25. Sub arrayDemo3()
  26. Dim arr As Variant '数组
  27. arr = Array("vba", 100, 3.14)
  28. MsgBox arr(0)
  29. End Sub
  30. '二维数组
  31. Sub arrayDemo4()
  32. Dim arr As Variant '数组
  33. arr = Array(Array("张三", 100), Array("李四", 76), Array("王五", 80))
  34. MsgBox arr(1)(1)
  35. End Sub
  36. '调用Excel工作表内存数组
  37. ' 一维数组[{"A",1,"C"}]
  38. '二维数组[{"a",10;"b",20;"c",30}]
  39. Sub mylook()
  40. Dim arr
  41. arr = [{"a",10;"b",20;"c",30}]
  42. Range("a1:b3") = arr
  43. MsgBox Application.WorksheetFunction.VLookup("b", arr, 2, 0) '调用vlookup时可以作为第二个参数
  44. End Sub
  45. '动态数组的定义方法
  46. Sub arrDemo5()
  47. Dim arr1() '声明一个动态数组(动态指不固定大小)
  48. Dim arr2 '声明一个Variant类型的变量
  49. arr1 = Range("a1:b2") '把单元格区域A1:B2的值装入数组arr1
  50. arr2 = Range("a1:b2") '把单元格区域A1:B2的值装入数组arr2
  51. MsgBox arr1(1, 1) '读取arr数组中第1行第1列的数值
  52. MsgBox arr2(2, 2) '读取arr1数组的第2行第2列的数值
  53. End Sub
复制代码

2、数组的赋值和计算

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

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

  1. '数组合并(join)与拆分(Split)
  2. Sub join_demo()
  3. Dim a As Variant
  4. Dim b As Variant
  5. ' Join using spaces
  6. a = Array("Red", "Blue", "Yellow")
  7. b = Join(a, "")
  8. MsgBox ("The value of b is :" & b) 'Red Bule Yellow
  9. ' Join using $
  10. b = Join(a, "$") 'Red$Bule$Yellow
  11. MsgBox ("The Join result after using delimiter is : " & b)
  12. End Sub
  13. Sub split_demo()
  14. Dim a As Variant
  15. Dim b As Variant
  16. a = Split("Red$Blue$Yellow", "$") 'a = Array("red","blue","yellow")
  17. b = UBound(a)
  18. For i = 0 To b
  19. MsgBox a(i)
  20. Next
  21. End Sub
复制代码

4、数组的筛选(Filter)

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

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

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

6、使用 数组获取全部 工作表名称的自定义函数

  1. '利用数组获取所有工作表名称的自定义函数
  2. Function getSheetsname(id)
  3. Dim i%, arr()
  4. k = Sheets.Count
  5. ReDim arr(1 To k)
  6. For i = 1 To k
  7. arr(i) = Sheets(i).Name
  8. Next
  9. getSheetsname = Application.Index(arr, id)
  10. End Function
复制代码

7、数组赋值,进步 计算服从

  1. '数组赋值,提高计算效率
  2. '2.03秒
  3. Sub dataInput()
  4. Dim start As Double
  5. start = Timer
  6. Dim i&
  7. For i = 1 To 30000
  8. Cells(i, 1) = i
  9. Next
  10. MsgBox "程序运行时间为" & Format(Timer - start, "0.00") & "秒"
  11. End Sub
  12. '0.12秒
  13. Sub dataInputArr()
  14. Dim start As Double
  15. start = Timer
  16. Dim i&, arr(1 To 30000) As String
  17. For i = 1 To 30000
  18. arr(i) = i
  19. Next
  20. Range("a1:a30000").Value = Application.Transpose(arr)
  21. MsgBox "程序运行时间为" & Format(Timer - start, "0.00") & "秒"
  22. End Sub
  23. '0.09秒
  24. Sub dataInputArr2()
  25. Dim start As Double
  26. start = Timer
  27. Dim i&, arr(1 To 30000, 1 To 1) As String
  28. For i = 1 To 30000
  29. arr(i, 1) = i
  30. Next
  31. Range("a1:a30000").Value = arr
  32. MsgBox "程序运行时间为" & Format(Timer - start, "0.00") & "秒"
  33. End Sub
复制代码

总结

VBA数组还是很强大 的,通过对单元格地区 数据的读取,赋值给数组,再使用 数组函数或者调用Excel内置函数举行 干系 处理。别的 ,数组在赋值计算服从 上面也黑白 常高的,大家可以自行尝试下。

到此这篇关于VBA数组用法案例详解的文章就先容 到这了,更多干系 VBA数组用法内容请搜索 脚本之家从前 的文章或继续欣赏 下面的干系 文章盼望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar 右脸破相gl | 2021-9-12 12:52:26 | 显示全部楼层
admin楼主英明!
回复

使用道具 举报

avatar 永远丶并不远 | 2021-9-15 22:17:42 | 显示全部楼层
admin楼主,替我问候您主治大夫!
回复

使用道具 举报

avatar 阳子1989 | 2021-9-18 05:55:55 | 显示全部楼层
帖子很有深度!
回复

使用道具 举报

avatar 宇转好帖鄙 | 2021-9-18 22:07:22 | 显示全部楼层
什么狗屁帖子啊,admin楼主的语文是苍老师教的吗?
回复

使用道具 举报

avatar wxf2017 | 2021-9-26 08:56:07 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的源码论坛他的站点都是商业源码,还是免费下载的那种!特别好用。访问地址:http://www.mxswl.com 猫先森网络
回复

使用道具 举报

avatar 雨荷424 | 2021-9-26 08:56:09 | 显示全部楼层
楼上的很有激情啊!
回复

使用道具 举报

avatar 李亚兵 | 2021-9-28 12:18:59 | 显示全部楼层
很有看点!
回复

使用道具 举报

avatar 豪哥692 | 2021-9-30 16:00:36 | 显示全部楼层
支持一下!
回复

使用道具 举报

avatar 温润而哲 | 2021-10-3 10:25:40 | 显示全部楼层
admin楼主会死的很有节奏的!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则