理论上,从EXCEL对象导入的range一定是二维数组
如果导入是cells等可以试试
可以试试row cloumn ,selection
区分的意义不是很大,一般都只用1维数组,2维数组,最多3维数组把。
Sub ponyma_array101()
Dim arr1 '定义了一个变量
arr1 = Array(1, 2, 3, 4, 5)
'赋值时,重大变化,arr1就是数组了,arr1也是数组名
'使用array函数,构造一个1维数组,然后赋值给变量。默认是从index的0开始
For i = 0 To UBound(arr1, 1)
Debug.Print "arr1的第" & i & "个元素是" & arr1(i), "i是index"
Next
Debug.Print ""
k = 0
For Each i In arr1
Debug.Print "arr1的第" & k & "个元素是" & i, "但是k不是index"
k = k + 1
Next
Debug.Print ""
'变量仍然可以被赋值为其他内容
arr1 = 1
Debug.Print "arr1现在的的为" & arr1
End Sub
Sub ponyma_array101()
Dim arr2() '定义了一个动态数组,定义时重大变化,其中arr2就是数组名
Dim arr20()
Dim arr30()
Dim arr40()
arr2 = [{0,1,2,3,4,5}]
'arr2() 和arr2这2个不是一个东西? 事实证明是一个东西
'事实上不能同时声明 dim arr2 和 arr2(),会报错重复声明
'Debug.Print arr2(0) 出错证明这种赋值,是从index1开始的,不是默认方式
For i = 1 To UBound(arr2, 1)
Debug.Print "arr2的第" & i & "个元素是" & arr2(i), "i是index"
Next
Debug.Print ""
k = 1
For Each i In arr2
Debug.Print "arr2的第" & k & "个元素是" & i, "但是k不是index"
k = k + 1
Next
Debug.Print ""
'由于arr2已经数数组,不能直接把1个值,赋值给数组,数组名的
'arr2 = 1
'Debug.Print arr2
arr2() = Array("a", "b", "c")
'arr2 和arr2() 是等价的
'arr2== Array("a", "b", "c")
For i = 0 To UBound(arr2, 1)
Debug.Print "arr2的第" & i & "个元素是" & arr2(i), "i是index"
Next
Debug.Print ""
k = 1
For Each i In arr2
Debug.Print "arr2的第" & k & "个元素是" & i, "但是k不是index"
k = k + 1
Next
Debug.Print ""
'不管数组里有没有赋值,只要不preserve,数组随便redim
'redim 功能,其实和全部重新赋值一样
'写在这里会报错,后面这句 arr20(1) = 1 '动态数组没赋值前,是不能操作array的读和写的
ReDim arr20(5)
ReDim arr20(1, 7)
ReDim arr20(3)
arr20(1) = 100
Debug.Print arr20(1)
arr20 = Array(6, 66, 666)
Debug.Print arr20(1)
Debug.Print ""
ReDim arr40(5)
arr40(1) = 2
ReDim arr40(1, 7)
arr40(1, 1) = 22
ReDim arr40(3)
arr40(1) = 222
Debug.Print arr40(1)
'如果redim preserve,必须让新的redim包含老的index范围
arr30 = Array(10, 20, 30)
'ReDim Preserve arr30(0 To 2) 这样会报错
ReDim Preserve arr30(0 To 20)
Debug.Print arr30(0)
Debug.Print ""
End Sub
Sub ponyma_array101()
Dim arr5()
Dim arr6()
'redim(k) 说明redim可以带变量
'两种redim都可行
For i = 0 To 10
ReDim arr5(i) '多次redim,适合不知道数组大小时
arr5(i) = i * i
Debug.Print arr5(i)
Next
Debug.Print "换行"; '不换行
Debug.Print " " '打印1个空格
Debug.Print "" '换行
Debug.Print '换行
ReDim arr6(10) '知道数组大小,一次redim到位
For i = 0 To 10
arr6(i) = i * i
Debug.Print arr6(i)
Next
End Sub
遍历index真正保险的写法是
lbound() 和 ubound() 其实都是取的 index的上下范围
For i = lbound(arr2,1) To UBound(arr2, 1)
Debug.print arr2(i)
next
Sub ponyma_array1()
'先学习1维数组,和数组赋值,以及取1维数组index和element
Dim arr1 '定义了一个变量
Dim arr2() '定义了一个动态数组,定义时重大变化,其中arr2就是数组名
Dim arr3(3)
arr1 = Array(1, 2, 3, 4, 5) '赋值时,重大变化,arr1就是数组了,arr1也是数组名
'使用array函数,构造一个1维数组,然后赋值给变量。默认是从index的0开始
For i = 0 To UBound(arr1, 1)
Debug.Print "arr1的第" & i & "个元素是" & arr1(i), "i是index"
Next
Debug.Print ""
k = 0
For Each i In arr1
Debug.Print "arr1的第" & k & "个元素是" & i, "但是k不是index"
k = k + 1
Next
Debug.Print ""
'结论1:可以用变量,被赋值为一个数组
'获得数组元素的方法,可以遍历index,也可以直接遍历element
arr2 = [{0,1,2,3,4,5}]
'arr2() 和arr2这2个不是一个东西? 事实证明是一个东西
'事实上不能同时声明 dim arr2 和 arr2(),会报错重复声明
'Debug.Print arr2(0) 出错证明这种赋值,是从index1开始的,不是默认方式
For i = 1 To UBound(arr2, 1)
Debug.Print "arr2的第" & i & "个元素是" & arr2(i), "i是index"
Next
Debug.Print ""
k = 1
For Each i In arr2
Debug.Print "arr2的第" & k & "个元素是" & i, "但是k不是index"
k = k + 1
Next
Debug.Print ""
arr3(0) = 99
arr3(1) = 1
arr3(2) = 2
arr3(3) = 3
For i = 0 To UBound(arr3, 1)
Debug.Print "arr3的第" & i & "个元素是" & arr3(i), "i是index"
Next
Debug.Print ""
k = 0
For Each i In arr3()
Debug.Print "arr3的第" & k & "个元素是" & i, "但是k不是index"
k = k + 1
Next
Debug.Print ""
End Sub
二维数组