1 在VBA里定义好数组后,导入到EXCEL里去
- Rem 把数组导入到excel
- REM 如果导入的是一维数据,要注意一维数组是横向的
- REM 如果导入2维数据,就没这些问题。
- Rem 如果把一维数组导入到纵向EXCEL格子,需要先对一维数组进行transpose
- Rem 要注意,固定数组arr(3) 其实默认是arr(0 to 3) 是4个元素
Sub test003()
Dim arr1(3) '此处定义的数组,实际是4个元素,第1个元素为空
arr1(1) = 1
arr1(2) = 2
arr1(3) = 3
Range("a7:c7") = arr1 '会从数组的第1个元素开始赋值,而第1个元素为空
Debug.Print "a7=" & Range("a7")
Debug.Print "b7=" & Range("b7")
Debug.Print "c7=" & Range("c7")
Debug.Print vbCrLf
Range("b8:b11") = arr1 '不转置,一维数据是无法赋值进去一列的
Debug.Print "b8=" & Range("b8")
Debug.Print "b9=" & Range("b9")
Debug.Print "b10=" & Range("b10")
Debug.Print "b11=" & Range("b11")
Debug.Print vbCrLf
Range("a8:a11") = Application.Transpose(arr1)
Debug.Print "a8=" & Range("a8")
Debug.Print "a9=" & Range("a9")
Debug.Print "a10=" & Range("a10")
Debug.Print "a11=" & Range("a11")
End Sub
2 从EXCEL往数组导入
一般直接从excel里取出来的数组都是二维数组,
特列如果是单列数据被transpose转置后维1行后为一维数组
Sub test002()
arr1 = Range("a1:c3")
arr2 = Range("a1:a3")
arr3 = Application.Transpose(Range("a1:a3"))
Rem 从EXCEL里取一行仍然是1个2维数组
For i = 1 To 3
Debug.Print "arr1(" & "1," & i & ")=" & arr1(1, i)
Next i
Rem 从EXCEL里取一列仍然是1个2维数组
For i = 1 To 3
Debug.Print "arr2(" & i & ",1" & ")=" & arr2(i, 1)
Next i
Rem 从EXCEL里取一列+转置,却变成了1维数组
For i = 1 To 3
Debug.Print "arr3(" & i & ")=" & arr3(i)
Next i
3 关于EXCEL的真1维数据和2维数据,和transpose结合的测试
- 2维数组转置 还是2维的
- 1行或1列 range数据才可能 transpose为1维数组
Sub test4()
arr1 = Range("a1:c3")
arr2 = Application.Transpose(arr1)
arr3 = Range("a1:a3")
arr4 = Application.Transpose(arr3)
arr5 = Range("a1:c1")
arr6 = Application.Transpose(arr5)
Rem EXCEL里真二维数组转置并不会改变数组的维数
Rem EXCEL里数据以前是1列,被转置为1行为为1维数组
Rem EXCEL里数据本身是1行,本身是1列,或者1行被转为1列。都还是2维数组
For i = 1 To 3
For j = 1 To 3
Debug.Print arr1(i, j)
Next j
Next i
Debug.Print vbCrLf
For i = 1 To 3
For j = 1 To 3
Debug.Print arr2(i, j)
Next j
Next i
Debug.Print vbCrLf
For i = 1 To 3
Debug.Print (arr3(i, 1))
Next i
Debug.Print vbCrLf
For i = 1 To 3
Debug.Print (arr4(i))
Next i
Debug.Print vbCrLf
For i = 1 To 3
Debug.Print (arr5(1, i))
Next i
Debug.Print vbCrLf
For i = 1 To 3
Debug.Print (arr6(i, 1))
Next i
Debug.Print vbCrLf
End Sub
4 如果想把1行或1列EXCEL的range数据,转为1维数组?转置1次或2次
application.transpose