1 数组严格定义的重要性
- Dim arr1(3)
- Dim arr1( 1 to 3)
- Option base 1 等等的意义
2 数组的index下标默认值
- (1)数组的index下标应该是从0开始的,比如split生成的,还有未指定index下标的
- 如 dim arr1(5)
- (2)但是数组的index下标也有从1开始的情况,比如range 赋值的变量,默认下标从1开始
- 如 arr2=range("b1:d5")
- (3)数组的index下标受控制的情况
- 模块最前面 option base -1
- (4)数组index下标最好自己定义好
- 如 dim arr3(1 to 5)
3 使用option base 看数组声明模糊时差别
REM 代码开头
Option Base 1 '只能写在模块开头,不能写在过程内
Rem 你尝试修改 option base 1 或0 效果完全不同
rem option base 0 时 dim arr1(3) 是4个元素
rem option base 1 时 dim arr1(3) 是3个元素
Sub tes3001()
Dim arr1(3)
arr1(1) = 111
arr1(2) = 222
arr1(3) = 333
Range("a1:c1") = arr1
Debug.Print Range("a1")
Debug.Print Range("b1")
Debug.Print Range("c1")
End Sub
REM 代码结束
4 如果数组来源,是EXCEL赋值过来的
index下标需要以excel的为准,也就是x和y的下标都从1开始,而不是默认为0
Sub test001()
Dim arr1(3) '如果已经声明为数组名了,以后就不能给数组赋值
Dim arr2 '相当于dim arr2 as variant
'arr1 = Range("a1:c1") '不能给数组赋值? 只能给数组里的元素赋值?
arr1(0) = Range("a1")
arr2 = Range("a1:c1") '可以给变量赋值,赋予这个变量整个数组
arr3 = Range("c1:d4")
Debug.Print "arr1(0)=" & arr1(0)
Debug.Print "arr2(1,1)=" & arr2(1, 1) rem 输入arr2(0,0 )就报错
Debug.Print "arr3(1,1)=" & arr3(1, 1)
End Sub
5 如果数组下标也可以为负数,不过index必须是连续的
Sub tes3001()
Dim arr1(-1 To 2)
arr1(-1) = -111
arr1(0) = 0
arr1(1) = 111
arr1(2) = 222
Range("a1:c1") = arr1 '取数组元素不能取完的时候,只取前面的部分
Debug.Print Range("a1")
Debug.Print Range("b1")
Debug.Print Range("c1")
End Sub