
本技巧的目的:掌握单元格合并,拆分,求和的方法。用代码合并单元格后的效果 
用代码拆分单元格后的效果 
代码助手实现代码快速输入
使用代码助手还能够随时收录自己需要的代码:
如何判断单元格区域是否存在合并单元格代码如下: 
可以使用立即窗口来测试一下三个不同的结果: 当有合并单元格时,返回的结果为 True

当没有合并单元格时,返回的结果为 False

代码的书写就是根据三种不同的返回值来书写
Else '最后为无合并的单元格 IsNull 函数的 示例 1:
Dim 值, 检查结果 检查结果 = IsNull(值)
'因为值是空值,则:检查结果 = False。 
检查结果 = IsNull(值) '因为值设置为空值,则:检查结果= False。

示例 3:
括号内的 r 为外部传入的参数,外部传入时可以不使用 r 这个变量, 可以任意名称, 只要类型与当前子函数相符即可 参数传入后, 无论外部是什么名称, 当前过程会自动转换为 r 。参数 r 可以直接在当前过程中使用,不需要声明
合并单元格时能够连接每个单元格的文本的方法合并前: 
合并单元格的代码: 
合并单元格:rng.Merge s = s & "," & r '第1次连接时 s 为空值, 结果变成 ,453, 后面的连接是正常的: ,453,189.... 如上图
rng = Mid(s, 2) '使用 Mid 去掉第1个 , 逗号 WrapText 属性:所有单元格中的文本都自动换行,返回 True;都不自动换行,返回 False;有些单元格中的文本自动换行,有些不自动换行,返回 Null

执行后:

注释:
把三个地址放入数组:"A1:A4", "C3:C5", "E6:E8" 调用子函数--合并单元格所有内容, 执行合并单元格的操作
合并内容相同的连续单元格合并前的格式: 
合并后的格式及代码: 
拆分单元格时仍然保留每个单元格中的内容拆分前面已合并的单元格,代码如下: 
.Range("A1048576").End(xlUp).MergeArea.Rows.Count - 1 '为了防止最后行为合并的单元格, 出现计算不准确情况。使用这个公式计算最大行: 最大行 + 最大行的合并区域的行数 - 1
合并单元格对应同行区域求和代码: 
在选定区域中写入公式的代码: 选定区域为: B2:B9
第一次取出的 e 是 B2单元格 
Set s = e.MergeArea '当前 B2 单元格 的合并区域地址为: $B$2:$B$4 If e.Address = s.Range("a1").Address Then '因为 B2 是 合并区域: $B$2:$B$4 中的第1个地址,则执行后面的代码
求和区 = Replace(s.Address, 拆分(1), 替换列) '原来的地址: $B$2:$B$4, 拆分(1)的值: B 见上图, 替换成之前输入的列号: A
替换后的结果: $A$2:$A$4 
第二次取出的 e 是 B3单元格 
If e.Address = s.Range("a1").Address Then '因为 B3 不是 合并区域: $B$2:$B$4 中的第1个地址,则不执行后面的代码 就是通过这样一个循环,完成所有原生公式的写入,完成求和的目的
|