Здравствуйте. Есть такая задача. На входе есть строка с числами, разделенные через запятую: 8,3,1,21,156. Нужно получить строку с этими же числами, но отсортированными по возрастанию: 1,3,8,21,156. У меня мысли такие: через Split заполнить массив строкового типа. Затем в цикле заполнить другой массив, типа Integer через функцию CInt(). Далее отсортировать числовой массив и вывести уже результат в строковую переменную. Еще как вариант - посимвольно разбирать строку до разделителя и сразу же заполнять числовой массив, затем отсортировать его. Может есть более оптимальное решение? Можно ли, к примеру, у строкового массива изменить его тип сразу же или передать значения в числовой массив не через цикл? Спасибо.
Здравствуйте. Есть такая задача. На входе есть строка с числами, разделенные через запятую: 8,3,1,21,156. Нужно получить строку с этими же числами, но отсортированными по возрастанию: 1,3,8,21,156. У меня мысли такие: через Split заполнить массив строкового типа. Затем в цикле заполнить другой массив, типа Integer через функцию CInt(). Далее отсортировать числовой массив и вывести уже результат в строковую переменную. Еще как вариант - посимвольно разбирать строку до разделителя и сразу же заполнять числовой массив, затем отсортировать его. Может есть более оптимальное решение? Можно ли, к примеру, у строкового массива изменить его тип сразу же или передать значения в числовой массив не через цикл? Спасибо.Serega-Sol
Сообщение отредактировал Serega-Sol - Четверг, 12.08.2021, 18:28
Нужно получить строку с этими же числами, но отсортированными по возрастанию: 1,3,8,21,156
Предположим, что ваши числа в столбце А [vba]
Код
Sub iSortCell() Dim iLastRow& Dim arr, n&, i&, j&, Tmp iLastRow = Cells(Rows.Count, 1).End(xlUp).Row For n = 1 To iLastRow arr = Application.Trim(Split(Cells(n, "A"), ",")) For i = LBound(arr) To UBound(arr) - 1 For j = i + 1 To UBound(arr) If CDbl(arr(i)) > CDbl(arr(j)) Then Tmp = arr(j): arr(j) = arr(i): arr(i) = Tmp Next j Next i Cells(n, "B") = Join(arr, ",") Next End Sub
[/vba]
Цитата
Нужно получить строку с этими же числами, но отсортированными по возрастанию: 1,3,8,21,156
Предположим, что ваши числа в столбце А [vba]
Код
Sub iSortCell() Dim iLastRow& Dim arr, n&, i&, j&, Tmp iLastRow = Cells(Rows.Count, 1).End(xlUp).Row For n = 1 To iLastRow arr = Application.Trim(Split(Cells(n, "A"), ",")) For i = LBound(arr) To UBound(arr) - 1 For j = i + 1 To UBound(arr) If CDbl(arr(i)) > CDbl(arr(j)) Then Tmp = arr(j): arr(j) = arr(i): arr(i) = Tmp Next j Next i Cells(n, "B") = Join(arr, ",") Next End Sub