VBA插入行时如何使A、B列单元格继承上方行对应值?
问题解决:根据B列值插入行并复制上方单元格内容
你的核心问题是用(i - 1)获取了行号,但实际需要复制当前匹配行(第i行)的A、B列单元格值到新插入的行中。以下是修正后的代码及关键说明:
修正后的完整代码
Sub insertrow() Dim i As Integer Dim lastRow As Integer ' 获取B列实际有数据的最后一行行号,避免无效循环 lastRow = Cells(Rows.Count, 2).End(xlUp).Row ' 倒序循环,防止插入行后漏处理后续目标行 For i = lastRow To 1 Step -1 ' 判断B列单元格是否以"Mon"开头(不区分大小写) If InStr(1, Cells(i, 2).Value, "Mon", vbTextCompare) = 1 Then ' 在当前行下方插入新行 Cells(i + 1, 1).EntireRow.Insert ' 复制上方行的A列值到新行A列 Cells(i + 1, 1).Value = Cells(i, 1).Value ' 复制上方行的B列值到新行B列 Cells(i + 1, 2).Value = Cells(i, 2).Value ' 设置新行C列固定值为"ERP" Cells(i + 1, 3).Value = "ERP" End If Next i End Sub
关键修改说明
- 核心逻辑修正:将原来的
Cells(i + 1, 1).Value = (i - 1)替换为Cells(i + 1, 1).Value = Cells(i, 1).Value,B列同理,直接引用当前行的单元格值,而非行号计算结果。 - 优化循环范围:用
lastRow获取B列实际数据的最后一行,代替固定的1000,减少无效循环。 - 倒序循环优化:从最后一行往前遍历,避免正序插入行后,后续目标行被下移导致漏处理的问题。
内容的提问来源于stack exchange,提问作者hattybse
相关产品推荐
相关产品推荐

