Доброго времени суток! Имеется произвольный меняющийся ряд чисел, например 1, 2, 3, 5, 6, 8, каждое в отдельной ячейке. Нужно формулой в одной ячейке получить текст в формате 1-3, 5-6, 8. Ряд может начинаться не только с единицы, разброс может быть самым разным, но числа всегда отсортированы по возрастанию. Помогите пожалуйста! Сам пока не догадался до алгоритма
P.S.: не принципиально, если между двумя соседними числами с разницей в единицу будет дефис или запятая.
a.i.mershik, ну это то понятно, там проколы, 4 и 7, а вот упорядочить - это не совсем тот глагол что приемлем в данном случае. формулой, без использования доп. столбцов это не сделать.
Сгруппировать рад чисел непрерывные группы в формате ….
Function NewStr$(OldStr)
Dim re, ms, s$, i&, v1&, v2&, v&
Set re = CreateObject("VBScript.RegExp"): re.Global = True: re.Pattern = "\d+"
Set ms = re.Execute(Trim(Replace(OldStr, ",", " "))): s = ms(0): v1 = Val(s): v2 = v1
For i = 1 To ms.Count - 1
v = Val(ms(i))
If v = v2 + 1 Then
v2 = v
Else
If v2 <> v1 Then s = s & "-" & v2
s = s & "," & v: v1 = v: v2 = v
End If
Next
If v2 <> v1 Then s = s & "-" & v2
NewStr = s
End Function
Sub Test()
Const b$ = "1, 2, 3, 5, 6, 8"
MsgBox NewStr(b)
End Sub
Sub FromRange(rg As Range)
Dim ar
ar = WorksheetFunction.Transpose(rg.Value): If rg.Rows.Count = 1 Then ar = WorksheetFunction.Transpose(ar)
MsgBox NewStr(Join(ar))
End Sub
Sub Test()
FromRange Range("A5:A11")
End Sub
понятно что в А5:А11 должны быть числа (от меньших к большим) и внимание! скопируйте себе повторно NewStr (я там 1 строку добавил в код)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!