Lazy loaded image
Excel使用技巧
Lazy loaded image[VBA代码实现]更具通用性的取消合并单元格并自动填充原合并单元格的值
字数 2409阅读时长 7 分钟
2025-4-21
2025-4-21
type
status
date
slug
summary
tags
category
icon
password
notion image
 
💡

问题描述

有一个Excel文档,这个表格文档的前面很多列内都有合并单元格,直到末级列之后才是一个单元格对应一个值,这样我在运用数据透视表功能的时候就面临障碍了,你明白吧?
所以我想你帮忙写一个vba程序,可以将这些合并单元格取消合并,并且取消合并后的其他空单元格用原来这个合并单元格的值进行填充。 在未来的工作中,我可能经常收到这类表格,所以我希望你写的这个vba程序具有一定的通用性,并且注释尽可能的清晰,让小白也能明白并且运用,我会保存收藏起来备用。
 
好的,没问题!理解你的需求。合并单元格确实是数据透视表等数据分析功能的“天敌”。
下面我为你编写了一个 VBA 宏,它可以实现以下功能:
  1. 遍历当前活动工作表 (ActiveSheet) 的所有单元格。
  1. 检查每个单元格是否为合并单元格的一部分。
  1. 如果是,则获取该合并区域。
  1. 记录下该合并区域左上角单元格的值。
  1. 取消该区域的合并状态。
  1. 将记录下的值填充到刚刚取消合并后产生的所有(原为空白的)单元格中。
  1. 代码包含详细注释,方便理解。
如何使用这个 VBA 宏:
  1. 打开你的 Excel 文件。
  1. 备份!(重要): 在运行任何宏之前,强烈建议先备份你的原始 Excel 文件,以防万一出现意外情况。
  1. 打开 VBA 编辑器: 按下 Alt + F11 快捷键。
  1. 插入模块: 在 VBA 编辑器窗口中,点击菜单栏的 插入(I) -> 模块(M)。这会在左侧的“工程”窗口中添加一个新的“模块”文件夹和“模块1”。
  1. 粘贴代码: 将上面提供的 VBA 代码完整地复制并粘贴到右侧的代码编辑区域(那个大的空白窗口)。
  1. 运行宏:
      • 确保你想要处理的工作表是当前活动的工作表(也就是你正在查看的那个表)。
      • 回到 VBA 编辑器窗口。
      • 将光标放在 Sub UnmergeAndFillCells()End Sub 之间的任意位置。
      • 点击工具栏上的“运行”按钮(一个绿色的三角形 ▶),或者按 F5 键。
  1. 等待执行: 宏会开始运行。如果数据量很大,可能需要一点时间。完成后会弹出一个消息框提示“处理完成!”以及处理了多少个合并区域。
  1. 检查结果: 回到你的 Excel 工作表,检查合并单元格是否已按预期取消合并并填充了值。
代码注释说明:
  • Option Explicit: 要求你必须声明所有使用的变量,有助于减少因拼写错误等引起的 bug。
  • Dim ... As ...: 声明变量及其类型。
  • Set ws = ActiveSheet: 将变量 ws 指向当前打开并显示的工作表。
  • Set targetRange = ws.UsedRange: 定义要处理的范围为当前工作表中包含数据或格式的实际区域。
  • Application.ScreenUpdating = False/True: 关闭/恢复屏幕刷新,可以显著提高宏的运行速度,尤其是在处理大量单元格时。
  • For Each cell In targetRange: 遍历 targetRange 中的每一个单元格。
  • cell.MergeCells: 检查 cell 是否位于一个合并区域内,返回 TrueFalse
  • cell.MergeArea: 如果 cell.MergeCellsTrue,则返回代表整个合并区域的 Range 对象。
  • mergedArea.Cells(1, 1).Value2: 获取 mergedArea 这个范围中第一行第一列单元格的值。.Value2 通常是获取单元格原始值的更好选择。
  • mergedArea.UnMerge: 取消 mergedArea 这个范围的合并状态。
  • ws.Range(mergedAddress).Value = fillValue: 将 fillValue 这个值赋给由 mergedAddress 字符串定义的单元格范围。因为 UnMergemergedArea 对象可能不再代表原始的完整区域,所以使用地址重新获取范围更可靠。
  • MsgBox "...", vbInformation: 显示一个信息提示框给用户。
这个宏应该能很好地满足你的需求,并且具有较好的通用性。保存好这段代码,以后遇到类似表格就可以直接使用了!

 
温馨提示
🙏🏻
微信公众号平台更改了推送规则,如果您不想错过“小微创业服务”的文章,请将我们设为"星标",这样每次最新文章推送才会第一时间出现在您的订阅列表里。方法:点击文章页面左上角蓝色文字“小微创业服务”进入主页,点击关注后,再点主页右上角"...",然后选择"设为星标",即可完成,感谢您的支持。
也可以加入我们的知识星球,目前筹建期,免费加入!我们会在这里分享很多重要的资料和精选讯息!
notion image
上一篇
“是否构成业务”与“未实现内部交易损益是否抵销”的迷惑
下一篇
Excel取消合并单元格后,下方的空行自动填充

评论
Loading...