У меня есть список номеров в Excel:
1 2 3 6 9 10 11 15 18
Я хотел бы, чтобы формула перечисляла диапазоны с разницей в 1, поэтому:1-3 6 9-11 15 18
Кто-нибудь может мне помочь, пожалуйста! Большое спасибо
У меня есть список номеров в Excel:
1 2 3 6 9 10 11 15 18
Я хотел бы, чтобы формула перечисляла диапазоны с разницей в 1, поэтому:1-3 6 9-11 15 18
Кто-нибудь может мне помочь, пожалуйста! Большое спасибо
Я уверен, что это невозможно с базовой формулой. Тем не менее, у меня также была эта потребность раньше, и я написал функцию листа:
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).