vba word 查找_VBA实践+查找所有合并单元格并记录其地址

ff3573c8e427a2b4a7100a79abe7f2fb.png

VBA实践+查找所有合并单元格并记录其地址

合并单元格是两个以上单元格的合并,但在excel程序内部还是被当成多个单个的单元格的。合并单元格只有左上角的单元格包含数据,其他为空。一般,合并单元格的存在会给数据处理带来麻烦。要处理合并单元格,首先要找到合并单元格。

在excel中,合并单元格是一种格式,可以通过“查找替换”对话框进行查找,如下图所示。Ctrl+H调出“查找和替换”对话框,“查找内容”处单击格式,单击“对齐”选项卡,勾选“合并单元格”,确定后,单击“查找全部”,即可查找到当前工作表中所有的合并单元格。

4f2800cc9c9266ddc311fc5646a73b65.png

下图的示例中,共找到了三处合并单元格,并列出每个合并单元格的地址和值。可以单击这个清单中的条目,跳转到相应的合并单元格,以便进行手动处理。

也可以在“替换为”设置替换内容或替换格式,单击“全部替换”,批量对这些合并单元格进行处理。

5de2d0a126fcc279952d16bcffa276e9.png

可以通过一段简单的VBA代码实现上述过程。自定义VBA代码可以实现“查找和替换”不能实现的复杂操作,如往合并单元格中添加内容、进行运算、添加删除行或列等。

Excel的find方法与word中的find方法不同,word的可以检测到文档的结尾,设置是否继续从头查找或者停止查找,而excel的没有相应的设置,会不断的重复查找,所以需要额外设置停止查找的条件,如查找到的单元格的地址与第一次查找到的单元格相同则停止查找。

Excel的find方法似乎不能继承上次的设置,第二次使用时,即使参数相同,最好还是编写完整,否则可能发生错误。

为了能查找到下一处,find.after属性应该设置上次查找到的单元格。

Sub 查找所有合并单元格并记录地址()
Dim firstStr As String, alladd As String, cell1 As Range, i&
i = 0
Application.FindFormat.Clear  '清除原有查找格式
Application.FindFormat.MergeCells = True  '查找格式设置为合并单元格格式
With ActiveSheet.UsedRange '对已经使用区域查找
    Set cell1 = .Find(What:="", LookIn:=xlFormulas, LookAt:=xlPart, SearchFormat:=True)  '设置查找参数,并尝试查找一个合并单元格
    If cell1 Is Nothing Then
        MsgBox "区域内无合并单元格"
        Exit Sub  '如果找不到则退出
    Else
        firstStr = cell1.Address  '取第一个找到的单元格的地址
        Do
            Set cell1 = .Find(What:="", After:=cell1, LookIn:=xlFormulas, LookAt:=xlPart, SearchFormat:=True) '查找下一个,虽然前面已设置过,但此处查找参数仍然需要填写完整,否则查找出错
            alladd = alladd & Chr(13) & Chr(10) & cell1.Address
            i = i + 1
        Loop While firstStr <> cell1.Address  '直到找到的单元格的地址等于第一个单元格地址时停止
    End If
End With
MsgBox "共有" & i & "个合并单元格,地址分别为" & Chr(13) & Chr(10) & alladd
End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值