标签: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
实际上,它的工作原理与前面的代码相同,但有一个优点,即灵活地基于列的长度。
你可以根据实际数据范围和要复制的列,稍微修改上述代码,以满足你的需要。