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

Вход

Регистрация

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

 

= Мир MS Excel/сортировка чисел в строке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
сортировка чисел в строке
Serega-Sol Дата: Четверг, 12.08.2021, 18:25 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте.
Есть такая задача. На входе есть строка с числами, разделенные через запятую: 8,3,1,21,156. Нужно получить строку с этими же числами, но отсортированными по возрастанию: 1,3,8,21,156. У меня мысли такие: через Split заполнить массив строкового типа. Затем в цикле заполнить другой массив, типа Integer через функцию CInt(). Далее отсортировать числовой массив и вывести уже результат в строковую переменную. Еще как вариант - посимвольно разбирать строку до разделителя и сразу же заполнять числовой массив, затем отсортировать его. Может есть более оптимальное решение? Можно ли, к примеру, у строкового массива изменить его тип сразу же или передать значения в числовой массив не через цикл?
Спасибо.


Сообщение отредактировал Serega-Sol - Четверг, 12.08.2021, 18:28
 
Ответить
СообщениеЗдравствуйте.
Есть такая задача. На входе есть строка с числами, разделенные через запятую: 8,3,1,21,156. Нужно получить строку с этими же числами, но отсортированными по возрастанию: 1,3,8,21,156. У меня мысли такие: через Split заполнить массив строкового типа. Затем в цикле заполнить другой массив, типа Integer через функцию CInt(). Далее отсортировать числовой массив и вывести уже результат в строковую переменную. Еще как вариант - посимвольно разбирать строку до разделителя и сразу же заполнять числовой массив, затем отсортировать его. Может есть более оптимальное решение? Можно ли, к примеру, у строкового массива изменить его тип сразу же или передать значения в числовой массив не через цикл?
Спасибо.

Автор - Serega-Sol
Дата добавления - 12.08.2021 в 18:25
Kuzmich Дата: Четверг, 12.08.2021, 19:03 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Цитата
Нужно получить строку с этими же числами, но отсортированными по возрастанию: 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
[/vba]

Автор - Kuzmich
Дата добавления - 12.08.2021 в 19:03
Serega-Sol Дата: Пятница, 13.08.2021, 17:53 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Добрый день.
Kuzmich, протестил код, спасибо за идею.


Сообщение отредактировал Serega-Sol - Пятница, 13.08.2021, 17:55
 
Ответить
СообщениеДобрый день.
Kuzmich, протестил код, спасибо за идею.

Автор - Serega-Sol
Дата добавления - 13.08.2021 в 17:53
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!