Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Готовые решения

МЕНЮ САЙТА
  • 1
  • 2
  • 3

КАТЕГОРИИ РАЗДЕЛА

ОПРОСЫ
Какой версией Excel Вы пользуетесь?
Всего ответов: 35712
Главная » Готовые решения » VBA » Пользовательские функции

Получение интервалов из числовой последовательности
| Фотография 02.10.2013, 22:47

 

 

Function ConcNum(rng As Range) As String
Dim s$, x, i&, bu As Boolean
s = Replace(Join(Filter(Split("~" & Join(Application.Index(rng.Value, 1, 0), "~|~") & _
 "~", "|"), "~~", 0), ", "), "~", "") & ", 9E+307"
x = Split(s, ","): s = ""
For i = 0 To UBound(x) - 1
 s = s & ", " & Trim(x(i))
 Do While Val(x(i)) = Val(x(i + 1)) - 1
 bu = True: i = i + 1
 Loop
 If bu Then s = s & "-" & Trim(x(i)): bu = False
Next i
ConcNum = Mid(s, 3)
End Function

 

 

Function ConcNum22(rng As Range) As String
Dim x, i&, s$, bu As Boolean
With rng
 x = .Resize(.Count + 1).Value
End With: s = x(1, 1)
For i = 2 To UBound(x)
 If x(i, 1) <> x(i - 1, 1) + 1 Then
 s = IIf(bu = False, s & ", " & x(i, 1), s & "-" & x(i - 1, 1) & ", " & x(i, 1))
 bu = False
 Else
 bu = True
 End If
Next i
ConcNum22 = Left(s, Len(s) - 2)
End Function
Function ConcNum33(rng As Range) As String 'если числа в одной ячейке
Dim s$, x, i&, bu As Boolean
x = Split(rng.Value & " ")
If UBound(x) = 0 Then ConcNum33 = x(0): Exit Function
For i = 0 To UBound(x) - 1
 s = s & ", " & Trim(x(i))
 Do While Val(x(i)) = Val(x(i + 1)) - 1
 bu = True: i = i + 1
 Loop
 If bu Then s = s & "-" & Trim(x(i)): bu = False
Next i
ConcNum33 = Mid(s, 3)
End Function
Добавил: nilem |
Просмотров: 2366 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!