Vba 当单元格值更改时添加新行

Vba 当单元格值更改时添加新行,vba,excel,Vba,Excel,每当定义列中的单元格值发生更改时,我需要添加新行。然后我需要它对另一列做同样的操作,然后再对另一列做同样的操作 我使用了三次相同的代码,引用了不同的列,但我认为它不起作用,因为第一次运行时输入了新的(空白)行。我把它写成了三个独立的sub Sub LineTestCODE() Dim lRow As Long For lRow = Cells(Cells.Rows.Count, "C").End(xlUp).Row To 2 Step -1 If Cells(lRow, "C") &l

每当定义列中的单元格值发生更改时,我需要添加新行。然后我需要它对另一列做同样的操作,然后再对另一列做同样的操作

我使用了三次相同的代码,引用了不同的列,但我认为它不起作用,因为第一次运行时输入了新的(空白)行。我把它写成了三个独立的
sub

Sub LineTestCODE()

Dim lRow As Long
For lRow = Cells(Cells.Rows.Count, "C").End(xlUp).Row To 2 Step -1
    If Cells(lRow, "C") <> Cells(lRow - 1, "C") Then Rows(lRow).EntireRow.Insert
Next lRow    

End Sub


Sub LineTestENHANCEMENT()

Dim lRow2 As Long
For lRow2 = Cells(Cells.Rows.Count, "D").End(xlUp).Row To 2 Step -1
    If Cells(lRow2, "D") <> Cells(lRow2 - 1, "D") Then Rows(lRow2).EntireRow.Insert
Next lRow2

End Sub


Sub LineTestZONE()

Dim lRow3 As Long
For lRow3 = Cells(Cells.Rows.Count, "G").End(xlUp).Row To 2 Step -1
    If Cells(lRow3, "G") <> Cells(lRow3 - 1, "G") Then Rows(lRow3).EntireRow.Insert
Next lRow3   

End Sub
子行测试代码()
暗淡的光线和长的一样
对于lRow=单元格(Cells.Rows.Count,“C”)。结束(xlUp)。行到2步骤-1
如果是单元格(lRow,“C”)单元格(lRow-1,“C”),则是行(lRow).EntireRow.Insert
下一条路
端接头
子行测试增强()
昏暗的lRow2与长
对于lRow2=单元格(Cells.Rows.Count,“D”)。结束(xlUp)。行到2步骤-1
如果是单元格(lRow2,“D”)单元格(lRow2-1,“D”),则是行(lRow2).EntireRow.Insert
下一个lRow2
端接头
子行测试区()
昏暗的lRow3和长的一样
对于lRow3=单元格(Cells.Rows.Count,“G”)。结束(xlUp)。行到2步骤-1
如果是单元格(lRow3,“G”)单元格(lRow3-1,“G”),则是行(lRow3).EntireRow.Insert
下一个lRow3
端接头

我不太确定要如何添加行。看起来好像要测试更改的单元格,如果它与上面的单元格不匹配,则添加一行。我想也有可能您希望在列中为每个不匹配的单元格对添加一行。您将在下面的代码中看到这两个选项-选择您的选项

我将此代码放在Sheet_Change事件中,但如果您愿意,可以将其放在模块中并从此事件调用它。您将看到我已禁用事件,这可能是您的代码的问题

此例程不测试是否有人粘贴了值(即Target.Cells.Count>1)。您可能希望处理目标为多个单元格的可能性

For Each item in Target.Cells
    ..//..
Next
我可以为你工作

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim MyColumns As Range

    ' Define the value columns we're interested in
    If MyColumns Is Nothing Then
        Set MyColumns = Union(Columns("C"), _
                              Columns("D"), _
                              Columns("G"))
    End If

    ' If you just want to add one row for a non-matching change in one of the three columns changes
    If Not Intersect(Target, MyColumns) Is Nothing Then
        If Target.Row > 1 Then
            If Target.Offset(-1).Value <> Target.Value Then
                Application.EnableEvents = False
                Target.Offset(1).EntireRow.Insert
                Application.EnableEvents = True
            End If
        End If
    End If

    ' If you want to add one row for each non-matching cell value in the three columns
    Dim cell As Range

    If Not Intersect(Target, MyColumns) Is Nothing Then
        If Target.Row > 1 Then
            For Each cell In Intersect(MyColumns, Target.EntireRow).Cells
                If cell.Offset(-1).Value <> cell.Value Then
                    Application.EnableEvents = False
                    cell.Offset(1).EntireRow.Insert
                    Application.EnableEvents = True
                End If
            Next
        End If
    End If

End Sub
Private子工作表\u更改(ByVal目标作为范围)
暗淡的菌落范围
'定义我们感兴趣的值列
如果MyColumns什么都不是
设置MyColumns=Union(列(“C”)_
列(“D”)_
列(“G”))
如果结束
'如果只想在三列更改中的一列中添加一行作为不匹配更改
如果不相交(目标,MyColumns)则为空
如果Target.Row>1,则
如果Target.Offset(-1).值Target.Value,则
Application.EnableEvents=False
Target.Offset(1).EntireRow.Insert
Application.EnableEvents=True
如果结束
如果结束
如果结束
'如果要为三列中的每个不匹配单元格值添加一行
暗淡单元格作为范围
如果不相交(目标,MyColumns)则为空
如果Target.Row>1,则
对于Intersect中的每个单元格(MyColumns、Target.EntireRow)。单元格
如果单元格.Offset(-1).Value单元格.Value则
Application.EnableEvents=False
单元格偏移量(1).EntireRow.Insert
Application.EnableEvents=True
如果结束
下一个
如果结束
如果结束
端接头