【原创】VBA学习笔记(301)VBA 用application.index() 取2维数组里的某1列,某1行

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值