VBA从区域range()转化的数组都是二维数组,但特殊的1列或1行可以用Application.transpose为一维数组

  • 转1维
  • 如果取的range是1列,那么transpose1次可以变成1维数组
  • 如果取的range是1行,那么transpose2次可以变成1维数组
  • 其他多行多列的是不可能转为1维数组的
Sub test_arr1()


Debug.Print "这都是二维数组"
'单列
arr1 = Range("a1:a10")
'单行
arr2 = Range("a1:e1")
'范围
arr3 = Range("a1:e3")
Debug.Print


Debug.Print "for each不管是几维数组,先行再行逐个显示"
For Each I In arr1
   Debug.Print I
Next
Debug.Print

For Each I In arr2
   Debug.Print I
Next
Debug.Print

For Each I In arr3
   Debug.Print I
Next
Debug.Print



Debug.Print "用for index 的方法遍历"
For I = LBound(arr1) To UBound(arr1)
    Debug.Print arr1(I, 1)
Next
Debug.Print


For I = LBound(arr2) To UBound(arr2)
    Debug.Print arr2(1, I)
Next
Debug.Print

For I = LBound(arr3) To UBound(arr3)
    For J = LBound(arr3, 2) To UBound(arr3, 2)
        Debug.Print arr3(I, J);
    Next
    Debug.Print
Next
Debug.Print



'转1维
'如果取的range是1列,那么transpose1次可以变成1维数组
'如果取的range是1行,那么transpose2次可以变成1维数组
'其他多行多列的是不可能转为1维数组的

arr11 = Application.Transpose(arr1)
arr21 = Application.Transpose(Application.Transpose(arr2))

For I = LBound(arr11) To UBound(arr11)
    Debug.Print arr11(I)
Next
Debug.Print

For I = LBound(arr21) To UBound(arr21)
    Debug.Print arr21(I)
Next
Debug.Print


End Sub
发布了370 篇原创文章 · 获赞 45 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/xuemanqianshan/article/details/103996619