在Excel列表中提取连续数字组

时间:2018-12-11 09:53:52

标签: excel list excel-formula sequence

让我们以该列表为例

“ 1,2,3,8,9,10,11,12,55,56,57”

如您所见,我有一个列表,该列表通常以1的增量增加,但是经常跳过。

在此示例中,我有三组连续的数字,分别是1-3、8-12和55-57。

我需要一个给出两个列表的公式。每个组中的第一个数字,最后一组。

例如,第一个列表将是1、8和55。

另一个列表是3、12和57。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

对于这个问题,我使用:

  1. Sheet1作为主要工作表
  2. 数字出现在A列
  3. 起始编号出现在C列
  4. 尾数出现在D列

enter image description here

请尝试以下操作:

Option Explicit

Sub test()

    Dim LRL As Long, LRS As Long, i As Long, j As Long, StartValue As Long
    Dim NextValue1 As Long, NextValue2 As Long, Row As Long

    With ThisWorkbook.Worksheets("Sheet1")

        LRL = .Cells(.Rows.Count, "A").End(xlUp).Row
        Row = 0

        For i = 2 To LRL
            If Row < i Then
                StartValue = .Range("A" & i).Value

                    For j = 0 To LRL
                        NextValue1 = .Range("A" & i + j).Value
                        NextValue2 = .Range("A" & i + j).Offset(1, 0).Value

                        If NextValue1 + 1 <> NextValue2 Then
                            LRS = .Cells(.Rows.Count, "C").End(xlUp).Row
                            .Range("C" & LRS + 1).Value = StartValue
                            .Range("D" & LRS + 1).Value = NextValue1
                            Row = .Range("A" & i + j).Row
                            Exit For
                        End If
                    Next j

            End If
        Next i

    End With

End Sub

答案 1 :(得分:1)

您也可以使用数组公式:

每个组的开始

=A2

在(例如)C2和

=IFERROR(SMALL(IF(A$3:A$13-A$2:A$12>1,A$3:A$13),ROW()-ROW(A$2)),"")

在C3中并拉下来。

每组结束时

=IFERROR(SMALL(IF((A$3:A$13-A$2:A$12>1)+(A$3:A$13=""),A$2:A$12),ROW()-ROW(A$1)),"")

必须使用 Ctrl Shift Enter

输入最后两个公式

可以进一步完善以适应可变数量的行。