VBA常用代码解析
031 删除工作表中的空行
如果需要删除工作表中所有的空行,可以使用下面的代码。
Sub DelBlankRow()
DimrRow As Long
DimLRow As Long
Dimi As Long
rRow= Sheet1.UsedRange.Row
LRow= rRow + Sheet1.UsedRange.Rows.Count - 1
Fori = LRow To rRow Step -1
If Application.WorksheetFunction.CountA(Rows(i))= 0 Then
Rows(i).Delete
End If
Next
End Sub
代码解析:
DelBlankRow过程删除工作表中已使用的区域的所有空行。
第5行代码获得工作表中已使用区域的首行行号,其中使用UsedRange属性返回工作表中已使用的区域。
第6行代码获得工作表中已使用区域的最后一行行号。
第7行到第11行代码从最大行数至最小行数循环判断指定行是否为空行,若为空行则删除该行。
注意此处一定要从最大行数至最小行数开始循环判断,因为如果工作表中存在两行及两行以上的相邻空行,从最小行数开始循环删除的话,当第一行空行被删除后,被删除行下面的一行会往上移位,而此时For...Next循环的计数器已经加1,所以会出现漏删除的现象。
其中第8、9行代码使用工作表CountA函数判断当前行已使用单元格的数量,如果为零说明此行是空行则使用Delete删除。
应用于Range对象的Delete方法删除对象,语法如下:
expression.Delete(Shift)
参数expression是必需的,返回一个Range对象。
参数Shift是可选的,指定删除单元格时替补单元格的移位方式。可为以下 XlDeleteShiftDirection常量之一:xlShiftToLeft或xlShiftUp。如果省略该参数,则Microsoft Excel将根据区域的图形决定移位方式。
▲032 删除工作表的重复行
在实际应用中,可能需要删除工作表中A列的重复内容而只保留一行,那么可以借助工作表CountIf函数来完成,如下面的代码所示。
Sub DeleteRow()
DimR As Integer
Dimi As Integer
WithSheet1
R = .[a65536].End(xlUp).Row
For i = R To 1 Step -1
If WorksheetFunction.CountIf(.Columns(1),.Cells(i,1)) > 1 Then
.Rows(i).Delete
End If
Next
EndWith
End Sub
代码解析:
DeleteRow过程删除工作表A列重复单元格所在的整行内容,只保留一行。
第5行代码取得工作表中A列的最后一个非空单元格的行号,关于Range对象的End属性请参阅▲3 。
第6行到第10行代码从最大行数至最小行数循环判断A列单元格内容是否重复并删除重复单元格所在的整行。和▲32 一样,此处For...Next循环也要从最大行数至最小行数开始循环判断,否则可能会删除不净。其中第7行代码使用工作表CountIf函数判断单元格内容是否重复,如果重复则删除该单元格所在的行。
▲033 定位删除特定内容所在的行
如果需要删除工作表区域中特定内容所在的行,可以使用定位的方法快速删除,无需使用For...Next循环对单元格逐个进行判断。
示例代码如下:
Sub SpecialDelete()
DimR As Integer
WithSheet1
R = .Range("a65536").End(xlUp).Row
.Range("a2:a" & R).Replace"Excel",““,2
.Columns(1).SpecialCells(4).EntireRow.Delete
EndWith
End Sub
代码解析:
SpecialDelete过程删除工作表A列单元格中显示为“Excel”的行。
第5行代码使用Replace方法将工作表A列中显示为“Excel”的单元格内容替换成空白。关于Replace方法请参阅▲6 。
第6行代码使用SpecialCells方法定位到工作表A列中所有的空单元格,使用Range对象的EntireRow属性返回其所在的整个行一次性删除。关于SpecialCells方法请参阅▲4 。
▲034 判断是否选中整行
通过当前选择的单元格区域的单元格数目与行数或列数相比较,判断用户是否选中了整行或整列,如下面的代码所示。
Private Sub Worksheet_SelectionChange(ByVal TargetAs Range)
If Target.Rows.Count= 1 Then
If Target.Columns.Count = 256 Then
MsgBox "您选中了整行,当前行号" & Target.Row
End If
EndIf
End Sub
代码解析:
工作表的SelectionChange事件,判断用户是否选中了工作表中一整行单元格区域。
第2行代码中的Target.Rows.Count返回目标区域的行数,确定用户当前选择区域的总行数是否为1。
第3行代码中的Target.Columns.Count返回目标区域的列数,确定用户当前选择区域总列数是否为256。
第4行代码当用户选中一整行时显示一个消息框,提示用户当前选择的行号。
▲035 限制工作表的滚动区域
如果希望限制工作表中滚动的区域,可以通过设置WorkSheet对象的ScrollArea属性来实现。ScrollArea属性使用以A1样式的区域引用形式(字符串类型)返回或设置工作表允许滚动的区域。当设置了工作表滚动区域之后,用户不能选定滚动区域之外的单元格,但仍然可以选定区域之外的其他对象(例如图形、按钮等),同时工作表的一些相应功能可能被禁止(例如工作表全选、选中整行或整列等)。
在VBE中的工程管理窗口选择相应工作表对象,然后在其属性窗口中设置ScrollArea属性,即可限制工作表中滚动的区域。
但是Excel不会记忆该项设置,当再次打开该工作簿时,ScrollArea属性将被重置,用户必须重新设置ScrollArea属性才能限制工作表中的滚动区域,解决方法是使用代码在工作簿打开时对ScrollArea属性进行设置,如下面的代码所示。
Private Sub Workbook_Open()
Sheet1.ScrollArea= "B4:H12"
End Sub
代码解析:
工作簿的Open事件,在打开该工作簿时设置Sheet1工作表的滚动区域为“B4:H12”单元格区域。
如果需要取消滚动区域的限制,可以将ScrollArea属性值设置为空,如下面的代码所示。
Sheet1.ScrollArea =““
▲036 复制自动筛选后的数据区域
用户在对数据列表进行自动筛选后,往往希望将自动筛选的结果复制到其它地方。
这时可以通过获取该列表区域中可见单元格的方法得到筛选结果的单元格区域,并复制到工作表Sheet2中,如下面的代码所示。
Sub CopyFilter()
Sheet2.Cells.Clear
WithSheet1
If .FilterMode Then
.AutoFilter.Range.SpecialCells(12).CopySheet2.Cells(1,1)
End If
EndWith
End Sub
代码解析:
CopyFilter过程将Sheet1表中的筛选结果复制到工作表Sheet2中。
第2行代码清除Sheet2表中数据。
第4行代码判断Sheet1表是否处于自动筛选状态。FilterMode属性返回工作表是否处于筛选模式,如果指定工作表中包含已筛选序列且该序列中含有隐藏行,则该值为True。
第5行代码通过AutoFilter对象的Range属性返回工作表的自动筛选列表区域,再使用SpecialCells方法获取该列表区域中可见单元格(SpecialCells方法请参阅▲4 ),得到筛选结果的单元格区域,然后使用Copy方法将结果区域复制到工作表Sheet2中,应用于Range对象的Copy方法将单元格区域复制到指定的区域或剪贴板中,语法如下:
expression.Copy(Destination)
参数expression是必需的,该表达式返回一个Range对象。
参数Destination是可选的,指定区域要复制到的目标区域。如果省略该参数,则将该区域复制到剪贴板中。
▲037 使用高级筛选获得不重复记录
在数据列表中,如果要将其中不重复的记录复制到另一工作表中,则可以通过高级筛选功能实现。
示例代码如下:
Sub Filter()
Sheet1.Range("A1").CurrentRegion.AdvancedFilter_
Action:=xlFilterCopy,Unique:=True,_
CopyToRange:=Sheet2.Range("A1")
End Sub
代码解析:
Filter过程使用AdvancedFilter方法对单元格A1的当前区域筛选不重复的记录,并将筛选结果复制到工作表Sheet2中。应用于Range集合的AdvancedFilter方法语法如下:
AdvancedFilter(Action,CriteriaRange,CopyToRange,Unique)
参数Action是必需的,可以为表格所列的 XlFilterAction常量之一。
参数CriteriaRange指定高级筛选操作的条件区域,缺省时表示没有条件限制。
参数CopyToRange表示指定被复制行的目标区域,仅当Action为xlFilterCopy时有效,否则忽略本参数。
参数Unique指示是否选择不重复的记录,如果其值为True,则重复出现的记录仅保留一条;如果其值为 False(默认值),则筛选出所有符合条件的记录。
VBA常用代码解析的更多相关文章
- css 常用代码解析
.cBan_1 .e2-pro li a{ display: block; -webkit-transition: all 0.3s linear;transition: all 0.3s linea ...
- 【原创】大数据基础之Spark(4)RDD原理及代码解析
一 简介 spark核心是RDD,官方文档地址:https://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-di ...
- 单元测试系列之十:Sonar 常用代码规则整理(二)
摘要:帮助公司部署了一套sonar平台,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ======== ...
- 单元测试系列之九:Sonar 常用代码规则整理(一)
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...
- Apache入门 篇(二)之apache 2.2.x常用配置解析
一.httpd 2.2.x目录结构 Cnetos 6.10 YUM安装httpd 2.2.x # yum install -y httpd 程序环境 主配置文件: /etc/httpd/conf/ht ...
- 笔记-爬虫-js代码解析
笔记-爬虫-js代码解析 1. js代码解析 1.1. 前言 在爬取网站时经常会有js生成关键信息,而且js代码是混淆过的. 以瓜子二手车为例,直接请求https://www.guaz ...
- angular-cli.json配置参数解析,常用命令解析
1.angular-cli.json配置参数解析 { "project": { "name": "ng-admin", //项目名称 &qu ...
- 常用json解析库比较及选择 fastjson & gson
一.常用json解析库比较及选择 1.简介 fastjson和gson是目前比较常用的json解析库,并且现在我们项目代码中,也在使用这两个解析库. fastjson 是由阿里开发的,号称是处理jso ...
- Beam Search快速理解及代码解析(上)
Beam Search 简单介绍一下在文本生成任务中常用的解码策略Beam Search(集束搜索). 生成式任务相比普通的分类.tagging等NLP任务会复杂不少.在生成的时候,模型的输出是一个时 ...
随机推荐
- EMD分析 Matlab 精华总结 附开源工具箱(全)
前言: 本贴写于2016年12与15日,UK.最近在学习EMD(Empirical Mode Decomposition)和HHT(Hilbert-Huang Transform)多分辨信号处理,FQ ...
- 玩转 Linux 系统的方法论
Linus 说“Just for fun”,而我要说“Just for 折腾”.想知道我是怎样折腾 Linux 的,请看下面这个截图: 从这个截图可以看出,我为了“折腾” Linux 系统,在我的电脑 ...
- 通过Zabbix API实现对主机的增加(无主机资产的添加和带主机资产的添加)、删除、获取主机id、获取模板id、获取组id
config.yaml存储zabbix的信息(主要包括zabbix server的url .请求头部.登陆的用户名密码) Zabbix_Config: zabbix_url: http://192.1 ...
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
- z-index--记录七
1.z-index用来控制元素重叠时堆叠顺序. 适用于:已经定位的元素(即position:relative/absolute/fixed). 2.不使用z-index的时候,堆叠顺序如下(从下到上) ...
- 阿里的weex框架到底是什么
title: 阿里的weex框架到底是什么 date: 2016-09-27 10:22:34 tags: vue, weex category: 技术总结 --- weex 工作原理 首先看下官方的 ...
- .NET Core采用的全新配置系统[1]: 读取配置数据
提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义在这两个文 ...
- JVM学习(3)——总结Java内存模型
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 为什么学习Java的内存模式 缓存一致性问题 什么是内存模型 JMM(Java Memory Model)简 ...
- 从接口、抽象类到工厂模式再到JVM来总结一些问题
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...
- 前端打包构建工具gulp快速入门
因为之前一直有人给我推荐gulp,说他这里好哪里好的.实际上对我来说够用就行.grunt熟悉以后实际上他的配置也不难,说到效率的话确实是个问题,尤其项目大了以后,目前位置遇到的项目都还可以忍受.不过不 ...