VBA学习(27):在筛选数据中复制可见单元格

news2024/11/26 10:23:18

在筛选数据中复制数据时,可以按原结构粘贴所复制的数据。具体如下文:

下图所示为示例数据。

我们对列C进行筛选,如下图所示

 复制单元格区域B2:B10,然后粘贴到以单元格E2开始的区域,结果如下图所示。正如所见,我们只能看到部分数据,其它数据被隐藏行所隐藏了。

 如果展开隐藏行,实际的粘贴结果如下图所示。

接下来,我们使用下面的代码来进行相同的复制粘贴。代码如下:

'用途:
'复制-粘贴(仅值):
'从筛选的区域到筛选的区域
'从复制的区域到未筛选的区域
'从未筛选的区域到筛选的区域
'对隐藏列没作用
Sub CopyVisibleToVisible2()
 Dim rngA As Range
 Dim rngB As Range, rngBB As Range
 Dim r As Range
 Dim Title As String, txA As String, txB As String
 Dim ra As Long, i As Long
 Dim rc As Long, xCol As Long, a1 As Long, a2 As Long, h As Long
 Dim Flag As Boolean
 
 On Error GoTo skip:
 
 Title = "Copy Visible To Visible"
 Set rngA = Application.Selection
 Set rngA = Application.InputBox("选择要复制的单元格区域, 然后单击确定:", Title, rngA.Address, Type:=8)
 
 '如果选择的是单个单元格,需要粘贴到多个单元格(在筛选的区域)
 If rngA.Cells.CountLarge = 1 Then
   Set rngB = Application.InputBox("选择要粘贴的单元格区域(多个单元格):", Title, Type:=8)
   rngB.SpecialCells(xlCellTypeVisible).Value = rngA.Value
   Exit Sub
 End If
 Set rngB = Application.InputBox("选择要粘贴的单元格区域(仅选择第一个单元格):", Title, Type:=8)
 Set rngB = rngB.Cells(1, 1)
 Application.ScreenUpdating = False
 ra = rngA.Rows.Count
 rc = rngA.Columns.Count
 
 If ra = 1 Then rngB.Resize(, rc).Value = rngA.Value: Exit Sub
 
 '如果所复制的单元格区域被粘贴到相同工作表的相同行
 '因此代码遍历每个可见区域, 这比遍历每个单元格更快.
 If Not Intersect(rngA.Cells(1).EntireRow, rngB) Is Nothing Then
   xCol = rngB.Column
   For Each r In rngA.SpecialCells(xlCellTypeVisible).Areas
     ActiveSheet.Cells(r.Row, xCol).Resize(r.Rows.Count, r.Columns.Count).Value = r.Value
   Next
   '如果所复制的单元格区域没有被复制到相同行, 则检查是否复制单元格区域和粘贴区域有相同的可见单元格结构
 Else
   Set rngB = rngB.Resize(ra, rc)
   a1 = rngA.Columns(1).SpecialCells(xlCellTypeVisible).Areas.Count
   a2 = rngB.Columns(1).SpecialCells(xlCellTypeVisible).Areas.Count
 
   If a1 = a2 Then
     For h = 1 To a1
       '如果两个区域任何相应区域有不同的行数, 意味着可见单元格有不同的结构.
       If rngA.Columns(1).SpecialCells(xlCellTypeVisible).Areas(h).Cells.CountLarge <> rngB.Columns(1).SpecialCells(xlCellTypeVisible).Areas(h).Cells.CountLarge Then
         Flag = True
         Exit For
       End If
     Next
   Else
     Flag = True
   End If
 
   '如果复制区域和粘贴区域有不同的可见单元格结构,
   '那么代码需要遍历两个区域中每一单元格, 这将在大数据中减缓处理速度
   If Flag = True Then
     Set rngA = rngA.Cells(1, 1).Resize(ra, 1)
     For Each r In rngA.SpecialCells(xlCellTypeVisible)
       rngB.Resize(1, rc).Value = r.Resize(1, rc).Value
       Do
         Set rngB = rngB.Offset(1, 0)
       Loop Until rngB.EntireRow.Hidden = False
     Next
     '如果复制区域和粘贴区域有相同的可见单元格结构,
     '那么代码遍历两个可见区域, 这将加快处理速度
   Else
     For i = 1 To rngA.Columns(1).SpecialCells(xlCellTypeVisible).Areas.Count
       rngB.SpecialCells(xlCellTypeVisible).Areas(i).Value = rngA.SpecialCells(xlCellTypeVisible).Areas(i).Value
     Next
   End If
 End If
 
 Application.GoTo rngB
 Application.ScreenUpdating = True
 Application.CutCopyMode = False
 
Exit Sub
skip:
 If Err.Number <> 424 Then
   MsgBox "发现错误: " & Err.Description
 End If
 
 Application.ScreenUpdating = True
 Application.CutCopyMode = False
End Sub

运行代码后,会弹出一个输入框,选择要复制的单元格区域B2:B10,单击“确定”;又会弹出一个输入框,选择要粘贴的单元格区域的第一个单元格,示例中是单元格E2,单击“确定”,结果如下图5所示。正如我们所看到的,与上图3不同,所复制的可见单元格按照原结构完全粘贴。

 如果展开隐藏行,结果如下图所示。

 技术交流,软件开发,欢迎微信沟通:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM之RLHF:Karpathy视角来对比RLHF技术和RL技术—RLHF is just barely RL(RLHF只是勉强算作强化学习)

LLM之RLHF&#xff1a;Karpathy视角来对比RLHF技术和RL技术—RLHF is just barely RL(RLHF只是勉强算作强化学习) 导读&#xff1a;2024年8月8日&#xff0c;Karpathy发表了一个有意思的观点&#xff0c;RLHF is just barely RL. 强化学习从人类反馈(RLHF)训练方法只是勉强属于…

怎么将音乐转为mp3格式?7种简单的手机音频转换方法!

怎么将音乐转为mp3格式&#xff1f; mp3是一种运用比较广泛的格式&#xff0c;几乎所有的音频设备、播放器和操作系统都可以播放MP3音乐。如果你的音频文件不是mp3格式&#xff0c;那么可以通过专业的mp3格式转换器进行转换。这样就不会出现格式不兼容&#xff0c;无法正常使用…

第四范式发布AI+5G视频营销产品 助力精准获客与高效转化

产品上新 Product Release 今天&#xff0c;第四范式AI5G视频电话互动营销产品全新发布。 相较于以往销效率低、互动差、转化差的传统电话外呼和短信营销方式&#xff0c;视频电话互动营销基于AI、5G等技术&#xff0c;可让用户接听电话时观看个性化视频广告并实时互动&#xf…

Fortify三种扫描模式有什么区别?分别怎么用?

一、通过“Audit Workbench”进行测试 “Audit Workbench”支持Java语言源代码的测试。 二、通过“Scan Wizard”进行测试 “Scan Wizard”支持Java、Python、C/C、.Net、Go、PHP、Flex、Action Script、HTML、XML、JavaScript、TypeScript、Kotlin、SQL、ABAP、ColdFusion语言…

基于asp.net的简单的BBS论坛管理系统源码

今天给大家分享一套c#的webform框架的简单的BBS论坛管理系统源码&#xff0c;老规矩&#xff0c;下载链接我放在了最后面了&#xff0c;需要的自行下载&#xff0c;喜欢的小伙伴记得点个赞哦&#xff01; 1.主要功能 这个系统是比较简单的BBS的论坛管理系统源码&#xff0c;包…

C++ //练习 17.2 定义一个tuple,保存一个string、一个vector<string>和一个pair<string, int>。

C Primer&#xff08;第5版&#xff09; 练习 17.2 练习 17.2 定义一个tuple&#xff0c;保存一个string、一个vector和一个pair<string, int>。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /**********************…

GD32 MCU内部温度传感器如何使用,以及适合哪种应用场景?

GD32 MCU全系列产品均内置温度传感器&#xff0c;内部温度传感器可以用于测量器件周围温度及变化&#xff0c;传感器的输出电压连接到ADC的第16通道&#xff0c;可被ADC转换成数字量。 温度传感器输出电压随温度线性变化&#xff0c;由于生产过程中的多样化&#xff0c;温度变…

索引使用规则以及注意失效的场景

目录 一、联合索引遵循最左前缀法则 1.1 执行带着唯一索引和联合索引情况: 1.2 执行不带最左侧字段情况: 1.3 执行跳过中间列情况&#xff1a; 1.4 使用联合索引查找是否跟建立索引的顺序有关&#xff1f; 二、范围查询 三、避免某些操作导致索引失效 3.1 索引列运算 3…

(计算机网络)数据链路层

目录 一.基本概述 二.基本术语 三.基本功能 四.CRC差错检验 五.点对点协议 六.PPP帧格式 七.以太网介绍 一.基本概述 结点&#xff1a;可以相当于一个实体。能够具备接收数据&#xff0c;发送数据的实体 物理层不关心介质问题&#xff0c;发送端和接收端数据不一致&…

docker配置国内镜像加速

docker配置国内镜像加速 由于国内使用docker拉取镜像时&#xff0c;会经常出现连接超时的网络问题&#xff0c;所以配置Docker 加速来使用国内 的镜像加速服务&#xff0c;以提高拉取 Docker 镜像的速度。 1、备份docker配置文件 cp /etc/docker/daemon.json /etc/docker/da…

Datawhale AI 夏令营——从零入门多模态大模型数据合成——Task1学习笔记

天池Better Synth 官方赛事链接&#xff1a;天池Better Synth多模态大模型数据合成挑战赛_算法大赛_天池大赛-阿里云天池的赛制 一、内容提要 天池Better Synth多模态大模型数据合成挑战赛 是 Datawhale 2024 年 AI 夏令营第四期的学习活动—— 适合想 入门并实践 多模态大模型…

java 实现-使用OpenFeign 实现远程调用外部接口(调用swgager)接口

首先根据提供的swagger路径&#xff0c;在网页中查看相关接口方法 打开接口后我们可以看见&#xff0c;接口的路径/online/list 以及可以看见入参和出参 根据所有提供的参考方法和路径&#xff0c;拼接出整体路径URL&#xff08;http://ip:端口/online/list&#xff09; 注意…

一键生成PPT、漫画、长文:橙篇让创意一触即发

​ 橙篇 如何快速高效地创作优质内容&#xff0c;成为了每个创作者都在思考的问题。而今天&#xff0c;我们要介绍的这款神器——橙篇&#xff0c;或许就是解开这个难题的钥匙。它不仅能让你的创意一触即发&#xff0c;更能将你的灵感瞬间化为现实。 橙篇 多样化功能 橙篇不仅仅…

21款奔驰GLS450升级原厂香氛负离子系统,提升车内空气质量

奔驰原厂香氛系统激活原车自带系统&#xff0c;将香气加藏储物盒中&#xff0c;通过系统调节与出风口相结合&#xff0c;再将香味传达至整个车厢&#xff0c;达到净化车厢空气的效果&#xff0c;让整个车厢更加绿色健康&#xff0c;清新淡雅。 产品功能&#xff1a;香氛负离子…

Java JDVC编程

1、Java的数据库编程&#xff1a;JDBC JDBC&#xff08;Java Database Connectivity&#xff09;是Java中用来与数据库进行交互的一种标准API&#xff08;应用程序编程接口&#xff09;。它为开发人员提供了一种统一的方式来访问各种类型的数据库管理系统&#xff08;DBMS&…

火锅店管理系统

TOC springboot260火锅店管理系统 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛运用&am…

(24)(24.3) MSP OSD(二)

文章目录 前言 3 OSD面板项目配置 4 使用SITL测试OSD 5 使用任务规划器配置布局 6 视频 前言 ArduPilot 支持 MSP OSD 协议&#xff0c;该协议允许在 DJI 护目镜上显示飞行数据&#xff0c;就像许多自动驾驶仪中的外部 MAVLink OSD 或内部集成模拟 OSD 一样。如果配置了 …

世界顶级思想家起名大师颜廷利:金融离不开银行,灵魂离不开引航

在《升命学说》一书中,山东济南的杰出人物、被广泛认为是最有影响力的哲学家之一的颜廷利教授,提出了一系列深奥而又实用的生命哲学。这些理念不仅是对传统文化的传承,也是对现代社会的深刻洞察。 世界伟大人民的哲学家思想家教育家,山东籍当代文化名人颜廷利教授提出,生命的本…

winApi与QtApi的共享内存通信

目的 就是A程序是QT的程序用的QT的接口读取共享内存,B程序是WinApi创建的共享内存,两个程序进行共享内存; 其间还有信号量,信号量,统一用的winApi的信号量。 就是下边这种情况: 下边的这个例子,就针对两块重点,进行分析: 1、QT侧的共享内存与win Api的共享内存如何…

音频剪辑新纪元:探索2024年人人都在用的音乐编辑工具

当你计划为视频添加旁白或投身有声书录制领域时&#xff0c;音乐剪辑软件便成为了不可或缺的关键工具。挑选一款既简单易上手又功能全面的音频编辑软件&#xff0c;将极大地加速并优化你创作理想音频文件的过程。 1.福昕音频剪辑 链接直达>>https://www.foxitsoftware.…