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
各种情况有点奇怪
Sub test5()
'VBA很多东西都比较奇怪,不能想当然
'不要太直觉,反直觉的!
'这个可以
Cells(5, 4) = Cells(1, 4)
Cells(5, 5) = Cells(1, 5)
'这个不行
Range("j1:m3") = Range("d1:g3")
'这个可以
arr1 = Range("d1:g3")
Range("j5:m7") = arr1
'这个居然也可以,range指定并非需要左下右上,其他指定区域方式也可以
Range("j11:m9") = arr1
'这个可以
Range("j13").Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1
Range("j13").Resize(UBound(arr1, 1), UBound(arr1, 2)).Interior.ColorIndex = 6
'这个不可以?
'Cells(17, 9).Resize(UBound(arr1, 1), UBound(arr, 2)) = arr1
'Cells(17, 9).Resize(UBound(arr1, 1), UBound(arr, 2)).Interior.ColorIndex = 6
'这个不可以?
'[j21].Resize(UBound(arr1, 1), UBound(arr, 2)) = arr1
'[j21].Resize(UBound(arr1, 1), UBound(arr, 2)).Interior.ColorIndex = 6
End Sub
这样也没问题
Sub test800()
arr = Range(("a2:b") & Range("a6555").End(xlUp).Row)
[e2].Resize(UBound(arr), 2) = arr
[e2].Resize(UBound(arr), 2).Interior.ColorIndex = 7
Cells(2, 9).Resize(UBound(arr), 2) = arr
Cells(2, 9).Resize(UBound(arr), 2).Interior.ColorIndex = 10
End Sub
这样写是可以的
http://blog.sina.com.cn/s/blog_4be3eccc0100cyl8.html 这个帖子里讨论的错误,可能因为时间久远,已经兼容了?
Sub test801()
a = 6
Cells(1, 1).Resize(10, 10) = a
Cells(1, 1).Resize(10, 10).Interior.ColorIndex = 6
Cells(1, 1).Resize(10, 10) = 8
Cells(1, 1).Resize(10, 10).Interior.ColorIndex = 8
b = Cells(1, 1).Resize(10, 10)
For i = LBound(b, 1) To UBound(b, 1)
For j = LBound(b, 2) To UBound(b, 2)
Debug.Print b(i, j);
Next
Debug.Print
Next
End Sub
Sub test5()
'VBA很多东西都比较奇怪,不能想当然
'不要太直觉,反直觉的!
'这个可以
Cells(5, 4) = Cells(1, 4)
Cells(5, 5) = Cells(1, 5)
'这个不行
Range("j1:m3") = Range("d1:g3")
'这样可以
Range("j5:m7") = Range("d1:g3").Value
'这个可以
arr1 = Range("d1:g3")
Range("j9:m11") = arr1
'这个居然也可以,range指定并非需要左下右上,其他指定区域方式也可以
Range("j15:m13") = arr1
'这个可以
Range("j17").Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1
Range("j17").Resize(UBound(arr1, 1), UBound(arr1, 2)).Interior.ColorIndex = 6
'这个可以
Cells(21, 10).Resize(3, 4) = arr1
Cells(21, 10).Resize(3, 4).Interior.ColorIndex = 6
'这个不可以?
Cells(25, 10).Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1
Cells(25, 10).Resize(UBound(arr1, 1), UBound(arr1, 2)).Interior.ColorIndex = 7
[j29].Resize(3, 4) = arr1
[j29].Resize(4, 4).Interior.ColorIndex = 8
'这个不可以?
[j29].Resize(UBound(arr1, 1), UBound(arr, 2)) = arr1
[j29].Resize(UBound(arr1, 1), UBound(arr, 2)).Interior.ColorIndex = 9
End Sub