ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 187|回复: 2

[分享] 筛选后,指定列的数据复制到另一工作表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-6 14:33 | 显示全部楼层 |阅读模式

可以看这个救助贴,数据也有。后来搞了好久,总算搞起来了
https://club.excelhome.net/thread-1676682-1-1.html?_dsign=1769b519

If rowsnum > 0 Then


'方法一:先全部复制过去,再删除不要的列
'     Dim rngnew As Range
'     Set rngnew = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)
'
'     Sheets("查询汇总").Select '转到“查询汇总”表
'
'     With Sheets("查询汇总")
'         .Range("A1").Select  '选择A4单元格
'         rngnew.Copy .Range("A1")
'         .Range("AD1:AJ" & rowsnum).Delete Shift:=xlToLeft
'         .Range("AA1:AA" & rowsnum).Delete Shift:=xlToLeft
'         .Range("N1:Y" & rowsnum).Delete Shift:=xlToLeft
'         .Range("I1:L" & rowsnum).Delete Shift:=xlToLeft
'     End With
'

''方法二:获取未隐藏行号,遍历行号,获取数据再复制(遍历的速度有点慢)
'    Dim rngnew As Range
'    Dim arr
'    Dim i As Long, j As Long, k As Long
'
'    Set rngnew = Sheets("查询汇总").Range("A:Z")
'
'    k = 1 '初始化K值
'    For i = 1 To rowsnum
'     If Not ActiveSheet.Rows(i).Hidden Then
'      j = ActiveSheet.Cells(i, "A").Row '获取显示值的行号
'      rngnew.Cells(k, 1) = Sheets("数据").Cells(j, 1).Value
'      rngnew.Cells(k, 2) = Sheets("数据").Cells(j, 2).Value
'      rngnew.Cells(k, 3) = Sheets("数据").Cells(j, 3).Value
'      rngnew.Cells(k, 4) = Sheets("数据").Cells(j, 4).Value
'      rngnew.Cells(k, 5) = Sheets("数据").Cells(j, 5).Value
'      rngnew.Cells(k, 6) = Sheets("数据").Cells(j, 6).Value
'      rngnew.Cells(k, 7) = Sheets("数据").Cells(j, 7).Value
'      rngnew.Cells(k, 8) = Sheets("数据").Cells(j, 8).Value
'      rngnew.Cells(k, 9) = Sheets("数据").Cells(j, 13).Value
'      rngnew.Cells(k, 10) = Sheets("数据").Cells(j, 26).Value
'      rngnew.Cells(k, 11) = Sheets("数据").Cells(j, 29).Value
'      rngnew.Cells(k, 12) = Sheets("数据").Cells(j, 30).Value
'      k = k + 1
'
'     End If
'    Next
'    rngnew.Copy Sheets("查询汇总").Range("A1")
'方法三:指定列装入range,进行合并,再复制(速度较快)
     Dim rngnew As Range
     Set rngnew = ActiveSheet.Range("A1:H" & rowsnum).SpecialCells(xlCellTypeVisible)
     Set rngnew = Union(rngnew, ActiveSheet.Range("M1:M" & rowsnum).SpecialCells(xlCellTypeVisible))
     Set rngnew = Union(rngnew, ActiveSheet.Range("Z1:Z" & rowsnum).SpecialCells(xlCellTypeVisible))
     Set rngnew = Union(rngnew, ActiveSheet.Range("AB1:AC" & rowsnum).SpecialCells(xlCellTypeVisible))

     Sheets("查询汇总").Select '转到“查询汇总”表


    ActiveSheet.Range("A1").Select  '选择A4单元格
    rngnew.Copy ActiveSheet.Range("A1")


  End If

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-11-6 18:39 | 显示全部楼层
既然用VBA了,没必要再去筛选操作,直接数组解决不更简单,速度还快。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-9 11:16 | 显示全部楼层
ykcbf1100 发表于 2023-11-6 18:39
既然用VBA了,没必要再去筛选操作,直接数组解决不更简单,速度还快。

我还在自学当中。请教一下有没有例子,谢谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 18:57 , Processed in 0.026438 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表