59、简单的动态数组。数组是一个很重要的内容,必须得掌握。之前好久都不知道多维数组的动态定义,在看了taller斑竹给别人的例子之后,才有所明白。希望大家也有所收获。例子
2gqJYj94.rar
(18.63 KB, 下载次数: 161)
Private Sub CommandButton1_Click() '简单介绍一下动态数组的例子
Dim arr, Xarr()
Dim rng As Range
Dim S1, S2, t1%, t2%
Dim iCol%, i%
Set rng = Sheet2.Range("a2").CurrentRegion '用一个变量定义为原始数据
iCol = rng.Columns.Count '原始数据的列数
arr = rng '用数组表示原始数据
S1 = [a1].Value: S2 = [b1].Value 'A、B列要查询的值
For i = 3 To iCol '判断要查询的在原始数据里对应的列数,t1和t2
If arr(1, i) = S1 Then t1 = i
If arr(1, i) = S2 Then t2 = i
If t1 > 0 And t2 > 0 Then Exit For
Next
k = 1
ReDim Preserve Xarr(1 To 4, 1 To k) '重新定义数组,对于标题行取值
Xarr(1, 1) = arr(1, 1): Xarr(2, 1) = arr(1, 2): Xarr(3, 1) = arr(1, t1): Xarr(4, 1) = arr(1, t2) '这是一个标题
For i = 2 To UBound(arr) '循环判断
If arr(i, t1) = arr(i, t2) And arr(i, t1) <> "" Then '如果两个数相等的话,就重新定义一个动态二维数组
k = k + 1 '依次增加
ReDim Preserve Xarr(1 To 4, 1 To k)
Xarr(1, k) = arr(i, 1)
Xarr(2, k) = Replace(arr(i, 2), " ", "")
Xarr(4, k) = arr(i, t1) '赋值
End If
Next
Rows("4:1000").ClearContents '删除4:1000行的内容
[a4].Resize(k, 4) = Application.WorksheetFunction.Transpose(Xarr) '最终一定要转置,赋值给单元格
End Sub
'根据redim的帮助,可以看出有preserve时,只能定义数组的最末维,对于这个二维数组,只能定义第二维为动态的,不能
'这样定义哦,ReDim Preserve Xarr(1 To k, 1 To 4),这样动态的就是第一维了,不允许
'故最终赋值给单元格的时候要转置
|