常用功能加载宏——快速定位合并单元格
时间:2022-07-22
本文章向大家介绍常用功能加载宏——快速定位合并单元格,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在Excel表格里,合并单元格会给使用过程带来很多麻烦,但是有时候为了排版好看,又需要用到合并的功能。
特别是有时候从外部收集到的表格,总有人喜欢使用合并单元格!
有时候做数据处理的时候,会碰上一些因为合并单元格而造成的问题:
这种情况,取消合并单元格就能够解决问题。
但是,如果表格数据较多,靠眼睛去看,要想很快的找到合并单元格就没那么容易了。
让我们看看用VBA如何来实现一个快速定位合并单元格的功能,效果:
首先在customUI.xml中修改代码,因为前面有2个合并单元格相关的功能,所以都放到一个下拉菜单里面:
<menu id="rbmenuMergeRange" label="合并单元格 " size="large" imageMso="ViewSlideSorterView">
<button id="rbbtnMergeRange" label="合并单元格与文本" supertip="合并单元格,同时合并所有单元格的文本" onAction="rbbtnMergeRange" imageMso="ReviewCombineRevisions"/>
<button id="rbbtnUnMergeRange" label="取消合并" supertip="取消单元格合并,并填充文本" onAction="rbbtnUnMergeRange" imageMso="CreateDiagram"/>
<button id="rbbtnSelectMergeRange" label="定位合并单元格" onAction="rbbtnSelectMergeRange" imageMso="ZoomToSelection" />
</menu>
回调函数:
Sub rbbtnSelectMergeRange(control As IRibbonControl)
Call MRange.SelectMergeRange
End Sub
函数实现:
最简单的也最容易想到的方法自然是直接循环判断选择单元格中的每一个单元格是否是合并的,找到了就可以停止下来并选中:
'选中合并单元格
Sub SelectMergeRange()
Dim rng As Range, selectRng As Range
'确保选中的是单元格
If TypeName(Selection) = "Range" Then
Set selectRng = Selection
For Each rng In selectRng
If rng.MergeCells Then
rng.Select
Exit Sub
End If
Next rng
End If
Set rng = Nothing
Set selectRng = Nothing
End Sub
可是,如果表格太大,循环去判断会有点慢,怎么去加快速度?
Excel用的多的,应该能够注意到,如果选中了合并单元格,开始菜单的合并单元格那个按钮会变化,这就是提醒使用者当前选中的是合并单元格。
而这个变化,其实只要选择的单元格中含有合并单元格就会出现,所以根据这个特性,我们去查找VBA中对应的这种属性,其实就是MergeCells属性,点击F1查看官方文档:
如果区域内包含合并单元格,此属性的值为 True。 读/写 Variant。
我们可以在立即窗口中去测试这个属性:
?Selection.MergeCells
- 如果选中的是合并单元格,返回True
- 如果选中的不含合并单元格,返回False
- 如果选中的单元格中,既有合并单元格、又有正常的非合并单元格,返回Null
根据返回Null的那个特性,我们就可以不需要一个一个的去判断了,比如可以整列整列的判断,这样查找起来就会快很多:
'选中合并单元格
Sub SelectMergeRange()
Dim rng As Range, selectRng As Range
Dim cols As Long, i As Long
'确保选中的是单元格
If TypeName(Selection) = "Range" Then
Set selectRng = Selection
cols = selectRng.Columns.Count
For i = 1 To cols
'先按列来判断是否包含了合并单元格
If VBA.IsNull(selectRng.Columns(i).MergeCells) Then
'再判断列里面的每一个单元格
For Each rng In selectRng.Columns(i).Cells
If rng.MergeCells Then
rng.Select
Exit Sub
End If
Next
End If
Next
End If
Set rng = Nothing
Set selectRng = Nothing
End Sub
- Silverlight学习(五)图形标绘
- radio与checkbox
- JavaScript之cookie
- Silverlight学习(四) domainservice动态多条件查询
- Android学习Tabhost、gallery、listview、imageswitcher
- ProgressBar、RatingBar和Spinner控件
- TimePicker控件、帧动画、补间动画
- Android学习之简单的数据存储
- Android学习之菜单
- Android简单登录系统
- android自定义控件
- 测试是浪费时间,我的程序肯定没问题
- Android学习自定义Dialog
- Android学习之DialogFragment
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 《剑指offer》第十天:青蛙跳台阶
- Kettle构建Hadoop ETL实践(一):ETL与Kettle
- 初识ABP vNext(2):ABP启动模板
- 维度爆炸?Python实现数据压缩竟如此简单!
- 如何扩展单个Prometheus实现近万Kubernetes集群监控?
- 一文带你彻底厘清 Isito 中的证书工作机制
- 如何将第三方服务注册集成到 Istio ?
- 【Pod Terminating原因追踪系列】之 containerd 中被漏掉的 runc 错误信息
- 【Pod Terminating原因追踪系列之二】exec连接未关闭导致的事件阻塞
- CD+服务网格灰度发布实践,一文带你体验如何编排更灵活
- 花十分钟的时间武装你的代码库
- 对HTML-input的一些思考和理解
- 【投稿】刀哥:Rust学习笔记 1
- 【Rust日报】2020-08-13 关于群集(Bevy)引擎ECS框架中system的语法糖是怎么实现的
- 最新情报:所有的递归都可以改写成非递归?