您好,欢迎来到独旅网。
搜索
您的当前位置:首页【转载】EXCELVBAUBound(arr,1),UBound(arr,2)解释

【转载】EXCELVBAUBound(arr,1),UBound(arr,2)解释

来源:独旅网
【转载】EXCELVBAUBound(arr,1),UBound(arr,2)解释

Resize(UBound(arr, 1), UBound(arr, 2) 这句什么意思

resize()是⼀个扩展单元格地址区域的函数,有两个参数,第⼀个是⾏扩展数,第⼆个是列扩展数

UBound(arr, 1) :arr数组中最⼤⾏数;UBound(arr, 2) :arr数组中最⼤列数。

这⾥是把数组的最⼤⾏数充当了 RESIZE的⾏扩展,最⼤列数 充当了resize的列扩展数。

arr = Range((\"a2:b\") & Range(\"a6555\").End(xlUp).Row)

[a2].Resize(UBound(arr), 2) = arr '请详细解释⼀下这⾏什么意思?

把AB2列存⼊数组arr,再将arr重写⼊这个区域

效果就是如果原来有公式,这样就全没了,相当于粘贴数值。

例⼦1:

-------------------------------Sub iSub() Dim arr

arr = Range(\"a1:a7\")

For i = 1 To UBound(arr, 1) For j = 1 To UBound(arr, 2) '处理的语句 Next NextEnd Sub

--------------------------------解释:

将 arr 赋值为⼀个数组,即 Range(\"a1:a7\")的单元格区域内容,即⼀个7⾏1列的区域相当于:先定义数组 arr(1 to 7 ,1 to 1),再赋值内容

使⽤UBound(arrayname[, dimension])函数,获取指定维数的上限:UBound(arr, 1) 取得arr第⼀维的上限: 7UBound(arr, 2) 取得arr第⼆维的上限: 1

⽤两个 for ,循环数组中的每个元素。

例⼦2:

Sub ⼆列数据找相同项数组法() Dim arr1, arr2, arr3()

arr1 = Range(\"A1:A13\") '第⼀列数据范围 arr2 = Range(\"B1:B13\") '第⼆列数据范围 For i = 1 To UBound(arr1) For j = 1 To UBound(arr2) If arr1(i, 1) = arr2(j, 1) Then

If InStr(Join(arr3, \ n = n + 1

ReDim Preserve arr3(1 To n) arr3(n) = arr1(i, 1) Exit For End If End If Next Next

Range(\"d1\").Resize(UBound(arr3), 1) = WorksheetFunction.Transpose(arr3) '相同的项放在d1单元格中。End Sub

Sub ⼆列数据找相同项字典法()

arr1 = Range(\"A1:A13\") '第⼀列数据范围 arr2 = Range(\"B1:B13\") '第⼆列数据范围 Set d = CreateObject(\"Scripting.Dictionary\") For i = 1 To UBound(arr1) d(arr1(i, 1)) = 0

Next

For j = 1 To UBound(arr2)

If d.exists(arr2(j, 1)) Then d(arr2(j, 1)) = 1 Next

For Each d1 In d.keys

If d(d1) = 0 Then d.Remove (d1) Next

Range(\"f1\").Resize(d.Count, 1) = WorksheetFunction.Transpose(d.keys) '相同的项放在f1单元格。End Sub

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dcrkj.com 版权所有 赣ICP备2024042791号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务