循环列并在重复值后插入行

问题描述 投票:0回答:1

我需要编写一个宏,它将在重复值之后添加一个空行(可以有两个以上的重复值)。

一旦我启动代码,它就会运行并且永远不会结束。

我不确定我应该在这里更改什么才能做到这一点。

到目前为止,我尝试过这样的宏,但它陷入了do while循环

Sub dup()
    Dim rw As Long
    Dim val1, val2 As String
    Sheets(4).Activate
    Range("C3").Select

    For rw = 3 To Range("C" & Rows.Count).End(xlUp).Row
        val1 = Range("C" & rw).Value
        val2 = Range("C" & rw + 1).Value
        Do While IsNull(Range("C" & rw)) = False
            If val2 = val1 Then
                Rows(rw + 1).Insert Shift:=xlDown
            Else
                If val1 = val2 Then
                End If
            End If
        Loop
    Next
End Sub
excel vba do-while
1个回答
1
投票

您需要使用反向循环。还要避免使用

.Select/.Activate
。您可能想查看如何避免在 Excel VBA 中使用 Select

直接处理物体。这是你正在尝试的吗(未经测试)?

Option Explicit

Sub dup()
    Dim ws As Worksheet
    '~~> Set this to the relevant worksheet
    Set ws = ThisWorkbook.Sheets("Sheet4")

    Dim lRow As Long
    Dim i As Long
    
    With ws
        '~~> Find last row in Column C
        lRow = .Range("C" & .Rows.Count).End(xlUp).Row
        
        '~~> Reverse Loop
        For i = lRow To 3 Step -1
            '~~> Check for duplicate. If found, insert row
            If .Range("C" & i).Value = .Range("C" & i - 1).Value Then .Rows(i).Insert
        Next i
    End With
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.