【Excel VBA编程】某一列中既有合并单元格又有普通单元格,如何填充数据?
- 2026-11-13 20:49:02
总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
小年至,祥瑞临,愿您和您的家人新岁欢畅,万事皆如意!在小年夜,鸭鸭为大家准备好了新年红包封面,大家记得去文末领取,增添喜气
在Excel中,合并单元格是将两个或多个相邻的单元格合并成一个单一单元格的操作。在制作复杂报表或进行数据展示时,它能有效简化视觉结构,突出重点信息,但同时也会给后续的数据处理带来很多麻烦
今天就聊一聊:如何将一列数据顺次填充到合并单元格列
1 效果展示
实现功能:将G列的数据顺次写入A列中,A列结构比较复杂,既有合并单元格又有普通单元格,并且合并单元格大小也不相同
2 代码及说明
2.1 操作步骤
打开你的.xlsm文档
按下 Alt + F11 快捷键,打开VBA编辑器
选择 “插入” -> “模块”,将文中代码复制粘贴到新模块中 修改合并单元格所在列,及读取数据列,涉及内容如下,可整体替换

备注:A列是合并单元格所在列,G是待填充数据所在列 光标移动到“WriteToMergedCells”内,按“F5”键运行
2.2 代码实现
参考代码如下:
Sub WriteToMergedCells()Dim ws As WorksheetDim lastRowA As Long, lastRowG As LongDim i As Long, gRow As LongDim targetCell As Range' 设置操作的工作表:当前活动工作表Set ws = ActiveSheetIf ws Is Nothing Then Exit Sub' 获取A列所在表格数据行数以及G列数据的行数'由于测试表格中A列数据是空的,以B列为准lastRowA = ws.Cells(ws.Rows.Count, "B").End(xlUp).RowlastRowG = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row' 如果G列没有足够数据,提示并退出If lastRowG < 2 ThenMsgBox "G列没有可供写入的数据。", vbExclamationExit SubEnd If' 初始化G列数据行(从第2行开始)gRow = 2' 遍历A列,从第2行开始i = 2Do While i <= lastRowA And gRow <= lastRowGSet targetCell = ws.Cells(i, "A")If targetCell.MergeCells ThenIf targetCell.Row = targetCell.MergeArea.Row And targetCell.Column = targetCell.MergeArea.Column ThentargetCell.Value = ws.Cells(gRow, "G").ValuegRow = gRow + 1i = i + targetCell.MergeArea.Rows.CountElsei = i + 1End IfElse' 普通单元格targetCell.Value = ws.Cells(gRow, "G").ValuegRow = gRow + 1i = i + 1End IfLoop' 提示完成MsgBox "数据顺序写入完成!共将 " & (gRow - 2) & " 行G列数据写入A列。", vbInformationEnd Sub
其中,代码核心逻辑是如何判断合并单元格以及合并单元格占据几行
第30行代码,通过MergeCells 属性判断是否为合并单元格,是合并单元格属性返回 True
接下来为了搞清楚第31行代码的作用,我们需要了解一些合并单元格的使用规则:
在Excel内部,一个合并区域(例如A2:A4合并)中,只有左上角的单元格(A2)存储实际的值,区域内的其他单元格(A3, A4)在VBA看来其值为空(Empty),但它们共享相同的合并区域属性
所以,仅仅知道一个单元格被合并了还不够,为了避免重复写入,我们必须找到并只处理那个存储数据的“源头”单元格,即合并区域的“”左上角”单元格
因此,第31行代码就是要达到这个目的,再利用 MergeArea.Rows.Count 跳跃整个合并单元格。接下来的代码就很清晰了,顺次读取写入合并单元格
3 结尾
好了,今天的编程知识到此结束了,又到每日分享冷知识的时间了
大家有没有想过Bug”这个原本指代昆虫的词汇,为何会变成计算机程序错误的代名词?
其由来可追溯至1947年哈佛大学Mark II计算机因一只飞蛾卡入继电器导致停机的事件,并将其记录为“首个发现bug的实际案例”,使用的正是其英文Bug的原意,即“虫子”或“臭虫”。与“Bug”相对应的“Debug”(调试),其字面意思“捉虫子”或“杀虫子”,也形象地描述了发现并修复程序错误的过程
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识