分享

VBA 临时,关于数组的index : index的初值,index的上下限,index序列

 条山石头 2021-04-04

1 数组的不同定义方式,会导致 index的起点不同

总结,简单的说,就是VBA里的数值,index默认从0 开始,而从工作表来源的函数,默认index从1开始

  • 用VBA的数值array() 或者 dim  或者 redim 这几种方法,默认index从0开始
  • 当然 dim  或者 redim 可以声明从1开始或从其他开始
  • 而从工作表区域赋来的数组,无论是1维还是2维,index都从1开始
  • [{}] 这种赋值方式,我认为是偏工作表的,
  • 因为 [a1:b5] 就等同于 range("a1;b5")
Sub test18a()

Dim arr1, arr2, arr3, arr4, arr5

'一维数组
'数组的多种定义和index初值

'总结,用VBA的数值array() 或者 dim  或者 redim 这几种方法,默认index从0开始
'当然 dim  或者 redim 可以声明从1开始或从其他开始

'[{}] 这种赋值方式,我认为是偏工作表的,
'因为 [a1:b5] 就等同于 range("a1;b5")
' 而从工作表区域赋来的数组,无论是1维还是2维,index都从1开始



arr1 = Array(1, 2, 3, 4, 5)
arr2 = [{6,7,8,9,10}]
arr3 = Application.WorksheetFunction.Transpose(Range("a1:a5"))
arr4 = WorksheetFunction.Transpose(Range("c1:g1"))
arr5 = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Range("c1:g1")))
ReDim arr6(4)
For i = 0 To 4
    arr6(i) = i
Next


    Debug.Print "arr1的index从小到大为" & LBound(arr1, 1) & "  " & UBound(arr1, 1)
    Debug.Print "arr2的index从小到大为" & LBound(arr2, 1) & "  " & UBound(arr2, 1)
    Debug.Print "arr3的index从小到大为" & LBound(arr3, 1) & "  " & UBound(arr3, 1)
    Debug.Print "arr4的index从小到大为" & LBound(arr4, 1) & "  " & UBound(arr4, 1)
    Debug.Print "arr5的index从小到大为" & LBound(arr5, 1) & "  " & UBound(arr5, 1)
    Debug.Print "arr6的index从小到大为" & LBound(arr6, 1) & "  " & UBound(arr6, 1)


End Sub

 

2 获得array的内容

  • 获得单个元素
  • 使用类这样的语句即可  arr1(1)=1 或  arr1(1,2)
  • 获得所有元素
  • 遍历法1: for each    in 可以无视几维数组
  • 遍历法2:for i =lbound(arr,1) to ubound(arr1,1)   需要先理解数组的维数等 数组结构
Sub test18b()

arr1 = Array(1, 2, 3, 4, 5)
arr2 = [{6,7,8,9,10}]
arr3 = Application.WorksheetFunction.Transpose(Range("a1:a5"))  '表现为1行,可认为是1维数组
arr4 = WorksheetFunction.Transpose(Range("c1:g1"))              '表现为1列默认为2维数组
arr5 = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Range("c1:g1")))  '表现为1行,可认为是1维数组
ReDim arr6(4)
For i = 0 To 4
    arr6(i) = i
Next

Debug.Print "取数组中的单个值"
Debug.Print arr1(1)
Debug.Print arr2(1)
Debug.Print arr3(1)
Debug.Print arr4(1, 1)
Debug.Print arr5(1)
Debug.Print arr6(1)


Debug.Print "遍历数组中的所有值"
For Each i In arr1
    Debug.Print i;
Next
Debug.Print

For Each i In arr4
    Debug.Print i;
Next
Debug.Print

For i = LBound(arr4, 1) To UBound(arr4, 1)
    Debug.Print "arr4(" & i & ")=" & arr4(i, 1) & "  ";
Next
Debug.Print

End Sub

 

 

3 如何取出数组的index呢?

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多