前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA技巧:使用数组复制不同的列

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

作者头像
fanjy
发布2022-11-16 13:03:32
2.7K0
发布2022-11-16 13:03:32
举报
文章被收录于专栏:完美Excel

标签: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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档