百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Excel VBA 常见技巧11-单元格中的批注

bigegpt 2024-08-16 14:18 2 浏览

判断单元格是否存在批注

在VBA中,可以利用Range对象的Comment属性判断单元格是否存在批注,如下面的代码所示。

#001 Sub HasComment()

#002 If Range("A1").Comment Is Nothing Then

#003 MsgBox "A1单元格中没有批注!"

#004 Else

#005 MsgBox "A1单元格中批注内容为:" & Chr(13) & Range("A1").Comment.Text

#006 End If

#007 End Sub

代码解析:

HasComment过程判断A1单元格是否存在批注,并用消息框显示批注信息。

Range对象的Comment属性返回一个批注对象,如果指定的单元格不存在批注,该属性返回Nothing。

运行HasComment过程结果如图 14?1所示。

图 14?1 显示批注内容

为单元格添加批注

如果希望为单元格添加批注,那么可以使用AddComment方法,如下面的代码所示。

#001 Sub Comment_Add()

#002 With Range("A1")

#003 If .Comment Is Nothing Then

#004 .AddComment Text:=.Value

#005 .Comment.Visible = True

#006 End If

#007 End With

#008 End Sub

代码解析:

Comment_Add判断单元格A1中是否存在批注,如果没有批注则为单元格A1添加批注并将单元格数值作为批注文本,同时显示批注对象。

第4行代码使用Range对象的AddComment方法为单元格添加批注。该方法只有一个参数Text,代表批注文本。如果单元格已经存在批注,则该方法返回一个错误。

第5行代码显示批注对象,Visible属性确定对象是否可视。

当单元格A1中不存在批注时,运行代码后的结果如图 14?2所示。

图 14?2 添加批注

删除单元格中的批注

如果需要删除单元格中的批注,那么可以使用ClearComments方法、ClearNotes方法或者Delete方法,如下面的代码所示。

#001 Sub Commentdel()

#002 On Error Resume Next

#003 Range("A1").ClearComments

#004 Range("A2").ClearNotes

#005 Range("A3").Comment.Delete

#006 End Sub

代码解析:

Notesdel过程删除单元格中的批注。

第2行代码错误处理语句,如果单元格中没有批注,那么运行第5行代码时会发生错误,所以使用On Error语句来忽略错误

第3行代码使用ClearComments方法删除单元格A1中的批注。ClearComments方法清除指定区域的所有单元格批注,语法如下:

expression.ClearComments

第4行代码使用ClearNotes方法删除A2单元格中的批注。ClearNotes方法清除指定区域中所有单元格的附注和语音批注,语法如下:

expression.ClearNotes

第5行代码使用Delete方法删除删除A3单元格中的批注.Range对象的Comment属性返回一个Comment对象,该对象代表与该区域左上角单元格相关联的批注。

合并单元格操作

判断单元格区域是否存在合并单元格

Range对象的MergeCells属性可以确定单元格区域是否包含合并单元格,如果该属性返回值为True,则表示区域包含合并单元格。

下面的代码判断单元格 A1是否包含合并单元格,并显示相应的提示信息。

#001 Sub IsMergeCell()

#002 If Range("A1").MergeCells = True Then

#003 MsgBox "包含合并单元格"

#004 Else

#005 MsgBox "没有包含合并单元格"

#006 End If

#007 End Sub

如果在指定区域中存在部分合并的单元格,如图 15?1所示,区域E8:I17中包含合并单元格区域F8:G9,H12:I13。判断这样一个单元格区域中是否包含合并单元格,可以使用下面的代码快速判断单元格区域中是否包含部分合并单元格,而不需要遍历单元格。

图 15?1 包含部分合并单元格的区域

#001 Sub IsMerge()

#002 If IsNull(Range("E8:I17").MergeCells) Then

#003 MsgBox "包含合并单元格"

#004 Else

#005 MsgBox "没有包含合并单元格"

#006 End If

#007 End Sub

代码解析:

当单元格区域中同时包含合并单元格和非合并单元格时,MergeCells属性将返回Null,因此第2行代码通过该返回结果作为判断条件。

运行IsMerge过程结果如图 15?2所示。

图 15?2 提示信息

合并单元格时连接每个单元格的文本

使用Excel的“合并及居中”按钮合并多个单元格区域时,Excel仅保留区域左上角单元格的内容,如果用户希望在合并如图 15?3所示单元格区域时,将各个单元格的内容连接起来保存在合并后的单元格区域中,则可以使用下面的代码。

图 15?3 合并前单元格区域

#001 Sub Mergerng()

#002 Dim StrMerge As String

#003 Dim rng As Range

#004 If TypeName(Selection) = "Range" Then

#005 For Each rng In Selection

#006 StrMerge = StrMerge & rng.Value

#007 Next

#008 Application.DisplayAlerts = False

#009 Selection.Merge

#010 Selection.Value = StrMerge

#011 Application.DisplayAlerts = True

#012 End If

#013 End Sub

代码解析:

Mergerng过程将所选各个单元格的内容连接起来保存在合并后的单元格区域中。

第4行代码使用TypeName函数判断当前选定对象是否为Range对象,若是则继续执行代码。

第5行到第7行代码将当前选中区域的内容连接起来保存在字符串变量StrMerge中。

第8行代码将DisplayAlerts属性设置为False,禁止在合并多重数值区域时,Excel显示的警告信息,如图 15?4所示,以避免中断代码的运行。

图 15?4 合并多重数值区域时警告信息

第9行代码使用Merge方法合并当前选定区域。应用于Range对象的Merge方法通过指定Range对象创建合并单元格,语法如下:

expression.Merge(Across)

参数expression是必需的,返回一个Range对象。

参数Across是可选的,如果该值为True,则将指定区域内的每一行合并为一个合并单元格。默认值为False。

第9行也可以使用下面的代码:

Selection.MergeCells = True

第10行代码将变量StrMerge的值赋给合并后的单元格。

运行Mergerng过程结果如图 15?5所示。

图 15?5 合并单元格结果

合并内容相同的连续单元格

如果需要合并如图 15?6所示的工作表中B列中部门相同的连续单元格,可以使用下面的代码。

图 15?6 需合并的工作表

#001 Sub Mergerng()

#002 Dim IntRow As Integer

#003 Dim i As Integer

#004 Application.DisplayAlerts = False

#005 With Sheet1

#006 IntRow = .Range("A65536").End(xlUp).Row

#007 For i = IntRow To 2 Step -1

#008 If .Cells(i, 2).Value = .Cells(i - 1, 2).Value Then

#009 .Range(.Cells(i - 1, 2), .Cells(i, 2)).Merge

#010 End If

#011 Next

#012 End With

#013 Application.DisplayAlerts = True

#014 End Sub

代码解析:

第7行到第11行代码,从最后一行开始,向上逐个单元格判断连续两个单元格的内容是否相同,如果相同则合并。

运行Mergerng过程后,结果如图 15?7所示。

图 15?7 合并内容相同的连续单元格

取消合并单元格时在每个单元格中保留内容

如果需要取消如图 15?7所示的工作表中B列“部门”的合并单元格,并且各个单元格均保留原合并单元格的内容,可以使用下面的代码。

#001 Sub UnMerge()

#002 Dim StrMer As String

#003 Dim IntCot As Integer

#004 Dim i As Integer

#005 With Sheet1

#006 For i = 2 To .Range("B65536").End(xlUp).Row

#007 StrMer = .Cells(i, 2).Value

#008 IntCot = .Cells(i, 2).MergeArea.Count

#009 .Cells(i, 2).UnMerge

#010 .Range(.Cells(i, 2), .Cells(i + IntCot - 1, 2)).Value = StrMer

#011 i = i + IntCot - 1

#012 Next

#013 End With

#014 End Sub

代码解析:

UnMerge过程取消工作表中B列中的合并单元格,并且各个单元格均保留原合并单元格的内容。

第7行代码取得B列每个合并单元格的内容。

第8行代码取得合并区域的单元格数量。

第9行代码使用UnMerge方法取消合并单元格。UnMerge方法将合并区域分解为独立的单元格,语法如下:

expression.UnMerge

第10行代码将原合并单元格的内容赋值给取消合并单元格后的区域。

第11行代码调整循环变量i的值,使下一次循环从下一个单元格区域开始。

运行UnMerge过程结果如图 15?6所示。

相关推荐

了解Linux目录,那你就了解了一半的Linux系统

大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...

Linux命令,这些操作要注意!(linux命令?)

刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux必学的60个命令(linux必学的20个命令)

以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

15 个实用 Linux 命令(linux命令用法及举例)

Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...

Linux 常用命令集合(linux常用命令全集)

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

Linux的常用命令就是记不住,怎么办?

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux常用文件操作命令(linux常用文件操作命令有哪些)

ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...

Linux 常用命令(linux常用命令)

日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E&#...

简单粗暴收藏版:Linux常用命令大汇总

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...

「Linux」linux常用基本命令(linux常用基本命令和用法)

Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...

Linux的常用命令就是记不住,怎么办?于是推出了这套教程

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux的30个常用命令汇总,运维大神必掌握技能!

以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...

Linux/Unix 系统中非常常用的命令

Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...