VBA中数组(Array)与随机数(Rnd)的使⽤作者:
本⽂链接:
⼀数组 array
1.1 数据定义
静态数组:长度不变的数组
动态数组:长度不定的数组,需要redim
数组 arr() 必须先声明后才可以使⽤!
1.2数组的index下标
(1)数组的index下标应该是从0开始的,⽐如split⽣成的,还有未指定index下标的excel的随机数函数
如 dim arr1(5)
(2)但是数组的index下标也有从1开始的情况,⽐如range 赋值的变量,默认下标从1开始
如 arr2=range("b1:d5")
(3)数组的index下标受控制的情况
模块最前⾯ option base  -1
(4)数组index下标最好⾃⼰定义好
如  dim arr3(1 to 5)
1.3 数组严格定义的重要性
Dim arr1(3)
Dim arr1( 1 to 3)
Option base 1 等等的意义
1.4 创建数组的⽅法
创建数组的⽅法
(1) array()
(2) split()  (对应join)
(3) 挨个元素赋值,甚⾄循环
(4) 变量/对象 = range对象(值)
1. Sub test101()
2. rem 测试创建数组的各种⽅法
3.
4. Dim arr1
5. Dim arr2
6. Dim arr3(0 To 3)
7.
8.
9. arr1 = Array(1, 2, 3, 4, 5, 6, 7)
0. arr2 = Split("a,b,c,d,e,f,g", ",")
1. arr3(0) = 1
2. arr3(1) = 2
13.
4. Debug.Print arr1(1)
5. Debug.Print arr2(1)
6. Debug.Print arr3(1)
17.
8. End Sub
⼆数组必须声明⼤⼩后才可以使⽤
2.1 测试
变量可以不事先定义,也可以不赋初值
数组必须实现声明⼤⼩后才可以使⽤
rem 变量可以赋初值,就可以表达式运算,不同类型的变量,默认初值不同rem 数组必须声明⼤⼩后才可以使⽤,包括运算,或者赋值
2.2 语法差别⽐较
js ⾥ 变量名 $a  字符串a
和其他语⾔不同的,其他语⾔标准 字符,字符串为 "", 变量名不⽤特殊标记⽽js 标记了变量,本质是⼀样的
python⾥ 变量 a 字符串" a” 函数  func()  数组 list=[]
函数和数组形式完全不同,没有实现区分的必要性
VBA⾥  变量 a  字符串 “a”  函数 func()  数组 array()
数组和函数形式很像,所以需要实现定义清楚,否则不好区分
但是VB⾥,index⽤ ()  ⽽不是⼀般语⾔的 []
1. Sub t3()
2. Dim arr3(3) As Integer
3. arr4(1) = 1 '直接会报错,arr4未定义!!
4. End Sub
rem 变量可以赋初值,就可以表达式运算,不同的变量,默认初值不同
1. Sub t3()
2.
3. rem 变量可以赋初值,就可以表达式运算,不同的变量,默认初值不同
4.
5. a = a + 1
6. Debug.Print a
7.
8. 'arr4(1) = 1 '直接会报错,arr4未定义!!
9.
0. End Sub
1. 'selection
2.
3. Sub 删除空格4()
4. Dim arr1()
5.
6.
7. ReDim arr1(11)                      '不redim呢
8. j = 0                              'j=1开始就会越界
9. For i = 1 To 11 Step 1
0.    If Not IsEmpty(Cells(i, 1)) Then
1.      arr1(j) = Cells(i, 1)
2.      j = j + 1
3.    End If
4. Next i
15.
16.
7. For j = 0 To UBound(arr1())
8.    Cells(j + 1, 9) = arr1(j)      '单元格得从1开始,arr()得从0开始
9. Next j
20.
21.
2. End Sub
三数组的声明+ 赋值不同⽅法
3.1 声明定义数组有3种⽅法:
直接声明数组
数组名为变量
数组名为对象名
3.2 数组名(变量名)与数组
变量名代表变量
dim a
或者不声明 a 直接使⽤也默认为变量
数组名 与数组
如果先声明 dim arr1()
arr1 就代表 arr1()  否则arr1 ⼀般就被认为是变量名
函数名  与函数
如果先声明的  function func1()
func1 就代表 func1()
3.3 数组不能被赋值,只有数组的元素,变量,对象可以被赋值
⽽数组不能被直接赋值
只有数组的元素可以被赋值
⽽变量,对象都是可以被直接赋值的
1. Sub test001()
2.
3. Rem VBA⾥的array是数组
4.    Rem 数组不能被赋值,只能给数组的元素赋值
5. Rem Excel⾥的range是对象,2维数组对象 <> 数组,range是对象不是数组!
6.    Rem 对象是可以被赋值的,赋值给了对象的 range.value属性
7.
8.
9. Dim arr1(3) '如果已经声明为数组名了,arr1就代表arr1(),以后就不能给数组赋值
0. Dim arr2  As Variant  '相当于dim arr2
1. Dim arr3 As Object
12.
13.
4. 'arr1 = Range("a1:c1")    '不能给数组赋值?只能给数组⾥的元素赋值?arr1 = Range("a1:c1").value 也不⾏
5. arr1(0) = Range("a1")      '可以给数组的某个元素赋值
6. arr2 = Range("a1:c1")      '可以给变量赋值,赋予这个变量整个数组
7. Set arr3 = Range("a1:c3")  '可以把EXCEL的range 赋值给变量,或对象。然后默认都成为了2维数组。
8. Range("b2:c2") = 9999
19.
20.
1. Debug.Print "arr1(0)=" & arr1(0)
2. Debug.Print "arr2(1,1)=" & arr2(1, 1)
3. Debug.Print "arr3(1,1)=" & arr3(1, 1)
24.
25.
6. End Sub
四数组定义和赋值
4.1 数组的声明/定义⼤⼩和赋值 ----数组使⽤前需要定义数组⼤⼩
Dim Array
Dim Array()
Dim array as object
⽆差别??--是不是有点太随便了,反⽽不好学规律
声明数组的时候
⽆论dim arr1  (as variant)
还是 dim arr1()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。