VBA技巧:使用数组复制不同的列

2022-11-16 13:03:32 浏览数 (1)

标签:VBA,Evaluate方法

假设我们只想复制工作表中指定列的数据,例如第1、2、5列的数据,有多种实现方法,这里介绍使用数组的VBA代码实现。

代码如下:

代码语言:javascript复制
Sub CopySpecialCols()
    Dim ar As Variant
    Dim var As Variant
    ar = Sheet1.[A1].CurrentRegion
    var = Application.Index(ar, [row(1:1000)], Array(1, 2, 5))
    Sheet2.Range("A1:C" & UBound(var)) = var
End Sub

上述代码将工作表Sheet1中的第1、2、5列的数据输出到工作表Sheet2中。

数组和行都是固定的。如何针对不同的行使其成为动态的?为了涵盖数据集,假设在声明lRow变量后,数组(ar)可以是:

ar=Range(“A1:F”& lRow)

但如何对行执行此操作?

可以利用Excel的Evaluate功能来生成灵活的行和列组合。VBA的rows.count命令可以确定区域内数据的终点,并存储该区域,以便在Index公式中使用。

优化后的代码如下:

代码语言:javascript复制
Sub CopySpecialColsdynamic()
    Dim ar As Variant
    Dim var As Variant
    ar = Sheet1.Range("A1", Sheet1.Range("F" & Rows.Count).End(xlUp))
    var = Application.Index(ar, Evaluate("row(1:" & Sheet1.[A1].CurrentRegion.Rows.Count & ")"), Array(1, 2, 5))
    Sheet2.Range("A1:C" & UBound(var)) = var
End Sub

实际上,它的工作原理与前面的代码相同,但有一个优点,即灵活地基于列的长度。

你可以根据实际数据范围和要复制的列,稍微修改上述代码,以满足你的需要。

0 人点赞