Combining consecutive values in a column with the help of VBA

后端 未结 3 1641
一整个雨季
一整个雨季 2021-01-25 23:06

I have a data like this :

A049
A050
A051
A053
A054
A055
A056
A062
A064
A065
A066

And I want the output like :

As you can see,

3条回答
  •  北荒
    北荒 (楼主)
    2021-01-25 23:34

    Another solution. It loops backwards from last row to first row.

    Option Explicit
    
    Public Sub FindConsecutiveValues()
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Worksheets("Sheet1")
    
        Dim lRow As Long 'find last row
        lRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
    
        Dim lVal As String 'remember last value (stop value)
        lVal = ws.Range("A" & lRow).Value
    
        Const fRow As Long = 2 'define first data row
        Dim i As Long
        For i = lRow To fRow Step -1 'loop from last row to first row backwards
            Dim iVal As Long
            iVal = Val(Right(ws.Range("A" & i).Value, Len(ws.Range("A" & i).Value) - 1)) 'get value of row i without A so we can calculate
    
            Dim bVal As Long
            bVal = 0 'reset value
            If i <> fRow Then 'if we are on the first row there is no value before
                bVal = Val(Right(ws.Range("A" & i - 1).Value, Len(ws.Range("A" & i - 1).Value) - 1)) 'get value of row i-1 without A
            End If
    
            If iVal - 1 = bVal Then
                ws.Rows(i).Delete 'delete current row
            Else
                If lVal <> ws.Range("A" & i).Value Then 'if start and stop value are not the same …
                    ws.Range("B" & i).Value = lVal 'write stop value in column B
                End If
                lVal = ws.Range("A" & i - 1).Value 'remember now stop value
            End If
        Next i
    End Sub
    

提交回复
热议问题