1 函数用法
application.index() 用法
- range() 从EXCEL拿出来的必然都是2维数组
- arr1=range("a1:c5") '取出来的是一个2维数组
- arr2=range("a1:d1") '取出来的看着是1行,但不是一维数组,实际是一个2维数组
- arr3=range("a1:a10") '取出来的看着是1列,但不是一维数组,实际是一个2维数组
- application.index() 却不一样
- 要注意 application.index() 从range里取 一行,得到的是一个 1维数组
- 要注意 application.index() 从range里取 一列,得到的是一个 2维数组
- applicaton.index 默认可以写0,或者 不写----都表示所有行/列
- application.index(arr1,0,3) 和application(arr,,3) 都可以
- application.index(arr1,3,0) 和application(arr,3) 也都可以
- 但是最后一个参数,仍然不能为空 (同 resize())
- application.index(arr1,3,) 这样是错误的
Sub jack3()
arr1 = Range("d1:g3")
arr2 = Application.Index(arr1, 0, 3)
arr3 = Application.Index(arr1, , 3)
arr4 = Application.Index(arr1, 3, 0)
arr5 = Application.Index(arr1, 3)
For Each j In arr2
Debug.Print j
Next
Debug.Print
For Each j In arr3
Debug.Print j
Next
Debug.Print
For Each j In arr4
Debug.Print j
Next
Debug.Print
For Each j In arr5
Debug.Print j
Next
Debug.Print
End Sub
结合range.resize() 用法---不写的参数,表示 基点range() 的行数
- 注意 application.index() 取出来的1行,resize() 也是一行,那么直接就匹配
- 注意 application.index() 取出来的1列,resize() 也是一列,那么直接就匹配---反而不能转置
- application.transpose()
2 代码1:取某1行/列
- VBA 用application.index() 取2维数组里的某1列,某1行
Sub qifengle1()
arr1 = Range("a1:b8")
arr2 = Application.Index(arr1, , 2)
arr3 = Application.Index(arr1, 3, 0)
For Each i In arr2
Debug.Print i
Next
Debug.Print
For Each i In arr3
Debug.Print i
Next
End Sub
3 代码2:如果把取回的行,列,重新放回 Excel
Sub Jackma2()
arr1 = Range("d1:g3")
arr2 = Application.Index(arr1, 1, 0)
arr3 = Application.Index(arr1, 0, 3)
Debug.Print "arr2= ";
For Each i In arr2
Debug.Print i;
Next
Debug.Print
'Debug.Print LBound(arr2, 1)
'Debug.Print UBound(arr2, 1)
'Debug.Print LBound(arr2, 2) '发现range用index取出一行,居然不再是2维,而是1维数组
'Debug.Print UBound(arr2, 2)
'下面错误原因是,因为把这个当2维数组了
'Cells(5, 4).Resize(0, UBound(arr2, 2)) = Application.Transpose(Application.Transpose(arr2))
'Cells(5, 4).Resize(0, UBound(arr2, 2)).Interior.ColorIndex = 3
'写回excel
'Cells(5, 4).Resize(0, UBound(arr2, 1)) = arr2 '这样会报错!,写0不行?
Cells(5, 4).Resize(, UBound(arr2, 1)) = arr2 '这样会报错!
Cells(5, 4).Resize(, UBound(arr2, 1)).Interior.ColorIndex = 3
Debug.Print "arr3= ";
For Each j In arr3
Debug.Print j;
Next
Debug.Print
'Debug.Print LBound(arr3, 1)
'Debug.Print UBound(arr3, 1)
'Debug.Print LBound(arr3, 2) '发现range用index取出一列,还是2维数组
'Debug.Print UBound(arr3, 2)
'写回excel
'Cells(1, 9).Resize(UBound(arr3, 1), 1) = Application.Transpose(arr3) 会导致取出来的回填EXCEL的全是3
'因为resize的形状也是列,反而只能用列直接怼进去,用行,只会取到第1个元素
Cells(1, 9).Resize(UBound(arr3, 1), 1) = Application.Transpose(arr3)
Cells(1, 9).Resize(UBound(arr3, 1), 1).Interior.ColorIndex = 6
End Sub