之前向大家展示过利用静态数组提取特定行内容的例子,现例举利用动态数组进行提取特定行的例子,但该方法相对较难理解,大家感兴趣可以看看。
例如上图,现需要提取A列中内容为“d”的整行内容,代码如下:
Sub 动态数组示例()
Dim arr, arr1() ‘此处还不确定arr1中数组的大小,在后面确定之后会重新定义
arr = Range(“a2:d10”)
For x = 1 To UBound(arr)
If arr(x, 1) = “d” Then
k = k + 1
ReDim arr1(1 To 4, 1 To k) ‘注意此处“redim”只能在列方向定义动态变量,所以arr中数组是横向的,arr1中数组是纵向的,最后要将行列转置一下
arr1(1, k) = arr(x, 1)
arr1(2, k) = arr(x, 2)
arr1(3, k) = arr(x, 3)
arr1(4, k) = arr(x, 4)
End If
Next x
Range(“e1”).Resize(k, 4) = Application.Transpose(arr1) ‘此处就是将行列转置的代码
End Sub
上述代码标红字段表示将arr数组中的内容重新赋值给新的数组arr1,但会发现,arr数组和arr1中数组内容是行列颠倒的,那是因为“preserve”只能定义列方向的动态变量。
arr中符合条件的内容如下,是一个三行四列的数组:
然后红色代码将arr中的数组内容赋值给arr1,其内容如下:
很清楚地看到两个数组是行列颠倒的,所以最后需要将arr1中的行列再转换回来,就需要用到“transpose”,如上述代码黄色代码所示。最后代码运行结果如下:
该方法用来提取特定行有点儿难以理解,但可以提高大家的VBA中对动态数组的概念及使用方法,大家可以看看喔