Excel 每次列中单元格的值与上面的值不同时,在上面插入一行

Excel 每次列中单元格的值与上面的值不同时,在上面插入一行,excel,vba,Excel,Vba,我使用的是一个数据表,其中单元格的值在几行(变量)之后不同 每当单元格的值不同时,当我们继续向下移动时,我想在该单元格上方添加一行 我尝试嵌套for循环,因为第一个循环将用于执行第二个循环61次(单元格更改发生的次数): Sub-jcapp() 作为整数的Dim i 作为整数的Dim j 静态k为整数 作为整数的Dim l 使用此工作簿。工作表(“工作表1”) k=3 对于l=1到61 对于i=k+1至175 j=k If.Cells(i,2).Value.Cells(i-1,2).Value和

我使用的是一个数据表,其中单元格的值在几行(变量)之后不同

每当单元格的值不同时,当我们继续向下移动时,我想在该单元格上方添加一行

我尝试嵌套for循环,因为第一个循环将用于执行第二个循环61次(单元格更改发生的次数):

Sub-jcapp()
作为整数的Dim i
作为整数的Dim j
静态k为整数
作为整数的Dim l
使用此工作簿。工作表(“工作表1”)
k=3
对于l=1到61
对于i=k+1至175
j=k
If.Cells(i,2).Value.Cells(i-1,2).Value和Not
IsEmpty(.Cells(i,2).Value)然后
k=i
行(.Cells(i+1,1).Row.插入移位:=xlDown
如果结束
退出
接下来我
下一个l
以
端接头
每当单元格值发生变化时,我希望在第9行、第20行等处添加行。什么都没有发生。没有结果。

插入(或删除)将抛出索引

标准方法是反向循环,而不是跟踪行数

选项显式
副jcapp()
我想我会坚持多久
使用此工作簿。工作表(“工作表1”)
对于i=61到2步骤-1
如果.Cells(i,2).Value.Cells(i-1,2).Value那么
调试.打印i
.Rows(.Cells(i,1).Row).插入移位:=xlDown
如果结束
接下来我
以
端接头
插入(或删除)会使索引失效

标准方法是反向循环,而不是跟踪行数

选项显式
副jcapp()
我想我会坚持多久
使用此工作簿。工作表(“工作表1”)
对于i=61到2步骤-1
如果.Cells(i,2).Value.Cells(i-1,2).Value那么
调试.打印i
.Rows(.Cells(i,1).Row).插入移位:=xlDown
如果结束
接下来我
以
端接头

您必须使用
工作表\u change
事件:无法清楚地理解问题。但是,您使用的是两个嵌套for循环,它们都具有相同的变量i。其他问题包括:未使用j,k被分配.i,最重要的是,如果分支导致在第一次迭代时退出内部循环,则在外部使用
Exit For
<代码>退出通常用于满足某些条件且无需进一步循环的情况。你可以试着描述你想要达到的目标,或者用初始数据和结果数据的图像添加帖子。为什么代码是左对齐的?循环的逻辑缩进等使代码更具可读性,无论是对他人还是对自己(从而有助于调试)。您必须使用
工作表\u change
事件:无法清楚地理解问题。但是,您使用的是两个嵌套for循环,它们都具有相同的变量i。其他问题包括:未使用j,k被分配.i,最重要的是,如果分支导致在第一次迭代时退出内部循环,则在外部使用
Exit For
<代码>退出通常用于满足某些条件且无需进一步循环的情况。你可以试着描述你想要达到的目标,或者用初始数据和结果数据的图像添加帖子。为什么代码是左对齐的?循环的逻辑缩进等使代码更具可读性,无论是对他人还是对自己(从而有助于调试)。
Sub jcapp()
  Dim i As Integer
  Dim j As Integer
  Static k As Integer
  Dim l As Integer
  With ThisWorkbook.Sheets("Sheet1")
    k = 3
    For l = 1 To 61
      For i = k + 1 To 175    
        j = k
        If .Cells(i, 2).Value <> .Cells(i - 1, 2).Value And Not 
        IsEmpty(.Cells(i, 2).Value) Then
          k = i
          Rows(.Cells(i + 1, 1).Row).Insert shift:=xlDown
        End If
        Exit For
      Next i
    Next l
  End With
End Sub