Excel VBA脚本遇“Object not found”错误:求合并相邻两行数据的解决方案
合并相邻行内容至右侧的VBA解决方案
需求说明
原始Excel表格结构:
| A----| B-------| C----| D-------| | Todd | Sentry | | Gary | Alquist |
需要实现的效果:将每一组上下相邻且包含内容的行中,第二行的内容移动到第一行的右侧,处理所有符合条件的行组,最终效果:
| A----| B-------| C----| D-------| | Todd | Sentry | Gary | Alquist |
原代码错误分析
你的脚本出现“Object not found”错误,主要原因如下:
- VBA中没有
ToString方法,数字转字符串需用CStr()函数 - 字符串拼接要使用
&而非+,+在VBA中可能被当作算术运算,导致范围引用错误 - 依赖
Select和Selection操作容易触发对象找不到的问题,应直接操作Range对象 IsEmpty的参数写法错误,需要传入Range对象而非拼接后的字符串
修正后的VBA代码
Sub MergeAdjacentRows() Dim ws As Worksheet Set ws = ActiveSheet ' 可改为指定工作表,如ThisWorkbook.Worksheets("Sheet1") Dim lastRow As Long lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 获取A列最后一行有数据的行号 Dim i As Long i = 1 Do While i <= lastRow ' 判断当前行与下一行A列是否有内容(确认是有效行组) If Not IsEmpty(ws.Cells(i, "A")) And Not IsEmpty(ws.Cells(i + 1, "A")) Then ' 把下一行A、B列内容复制到当前行C、D列 ws.Range("C" & i & ":D" & i).Value = ws.Range("A" & i + 1 & ":B" & i + 1).Value ' 删除已处理的下一行 ws.Rows(i + 1).Delete ' 更新最后一行行号(删除行后总数减少) lastRow = lastRow - 1 Else i = i + 1 End If Loop End Sub
代码说明
- 先获取数据最后一行,避免无效循环
- 用
Do While循环替代For循环,适配删除行后的行号变化 - 直接通过Value属性复制内容,比剪切粘贴更高效,且避免对象选择错误
- 处理完一组行后删除第二行,确保后续行处理逻辑正确
内容的提问来源于stack exchange,提问作者Ran Shorowitz
相关产品推荐
相关产品推荐

