Извлечение групп последовательных номеров в список Excel - PullRequest
0 голосов
/ 11 декабря 2018

Давайте использовать этот список в качестве примера

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

Как видите,У меня есть список, который обычно увеличивается на единицу, но который часто пропускает.

В этом примере у меня есть три группы последовательных чисел, которые являются 1-3, 8-12 и 55-57.

Мне нужна формула, которая дает мне два списка.Один за первый номер в каждой группе и один за последний.

Например, первый список будет 1, 8 и 55.

Другой список будет 3, 12 и 57.

Любая помощь будет намногооценили.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Вы также можете сделать это с формулами массива:

Для начала каждой группы

=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

Может быть уточнено для работы с переменным количеством строк.

0 голосов
/ 11 декабря 2018

Для этого вопроса я использую:

  1. Лист1 в качестве основного листа
  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...