在实际工作中,对于结构简单的带有合并单元格的表格,一般可以通过取消合并单元格后,再通过定位空值然后进行填充,但是对于这种填充只对结构简单的表格有效,如果合并单元格的区域像下面这样子,又将如何取消合并并且填充呢?
很显然,对于部门列的单元格合并,由于数据结构十分复杂,上述的做法已经不能满足需求了,一般的查找与引用函数也不会奏效,那么你可以试一下VBA法,两个for循环就可搞定,废话不多说,直接上GIF效果图。
下面的代码你可以直接拷贝到你电脑上用(粘贴到代码窗口[VBE界面]),主要意思是通过你选择的区域进行循环取消合并单元格:
Sub UnMergeRange2() '取消合并单元格
Dim MaxRow As Integer '
Dim Rng As Range
Dim x%, y%, m%, n%, i%
Dim Rng2 As Range
'Dim x% 等价于 Dim x As Integer
On Error ResumeNext'发生错误继续运行
'Rng接收选择的区域
Set Rng = Application.InputBox('请选择需要取消合并单元格的区域:', _
'区域选择', , , , , , 8)
'x循环选择区域的行
'y循环选择区域的列
For x = 1 To Rng.Rows.Count
For y = 1 ToRng.Columns.Count
'Rng2 接收循环在选择区域的行列(单元格)
Set Rng2 = Rng.Cells(x, y)
'i 接收Rng2合并单元格的合并单元格的数量
i = Rng2.MergeArea.Count
'当i=1时,则不存在合并单元格
'当i>1时,说明存在合并单元格
If i > 1 Then
'm 接收Rng2合并单元格区域 行数的统计
'n 接收Rng2合并单元格区域 列数的统计
m = Rng2.MergeArea.Rows.Count
n =Rng2.MergeArea.Columns.Count
Rng2.UnMerge '取消合并单元格
'Rng2(取消合并后)扩展m行n列的区域,
'等于Rng2的内容
Rng2.Resize(m, n).Value =Rng2.Value
End If
Next
Next
End Sub
包含完整代码的Excel文件在此:
https://pan.baidu.com/s/1NhbbkXinzBbIHi2dRswp8A
图文作者:赵中山
联系客服