У меня есть список номеров в Excel:

1 2 3 6 9 10 11 15 18

Я хотел бы, чтобы формула перечисляла диапазоны с разницей в 1, поэтому:1-3 6 9-11 15 18

Кто-нибудь может мне помочь, пожалуйста! Большое спасибо

1 ответ1

0

Я уверен, что это невозможно с базовой формулой. Тем не менее, у меня также была эта потребность раньше, и я написал функцию листа:

Public Function ConcatInts(target As Range) As String
    Dim s As String
    Dim i As Integer
    Dim n0 As Long
    Dim n1 As Long
    Dim n2 As Long
    Dim flag As Boolean
    n0 = 0
    n1 = target.Cells(1).Value
    n2 = n1
    flag = False
    For i = 2 To target.Cells.Count
        If IsNumeric(target.Cells(i).Value) Then
            n2 = target.Cells(i).Value
            If n2 = n1 + 1 Then
                If Not flag Then
                    n0 = n1
                    s = s & n1 & "-"
                    flag = True
                End If
            ElseIf n2 <> n1 Then
                If n1 = n0 + 1 And right(s, 1) = "-" Then
                    s = left(s, Len(s) - 1) & " "
                End If
                s = s & n1 & " "
                flag = False
            End If
            n1 = n2
        End If
    Next
    If n1 = n0 + 1 And right(s, 1) = "-" Then
        s = left(s, Len(s) - 1) & " "
    End If
    s = s & n1
    ConcatInts = s
End Function

Чтобы использовать это, вы должны открыть редактор VBA, нажав ALT+F11. Затем щелкните правой кнопкой мыши книгу в области навигации и выберите «Вставка» -> «Модуль»:

Затем просто скопируйте и вставьте код в модуль.

Теперь вы можете вызывать его как обычную функцию:

=ConcatInts(A1:I1)

Обратите внимание, что эта функция пропускает ячейки, содержащие текст, автоматически преобразует числа с плавающей точкой в целые числа и удаляет дубликаты. Это также требует, чтобы ваши номера были отсортированы.

Не забудьте сохранить свою книгу как макроподключенную книгу (XLSM).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .