Страницы: 1
RSS
Сортировка ячеек в каждой строке по алфавиту., Ячейки в строке (в каждой строке) необходимо отсортировать в алфавитном порядке.
 
Доброго часа.
Почитал архивы форума, но или не то, или я просто просмотрел.

Суть проблемы.
Есть 1178 строк (и это только в этом фале, в других поболее) сортировать вручную... не вариант.
Почему то через
Настраиваемая сортировка, только первая строка сортируется правильно а дальше строки не по алфавиту.

Имеется Ексель 2010

Цель отсортировать данные в каждой строке по алфавиту, все кроме первого столбца.

Есть таблица вида:
Птицыабрикосморковькапуставода
Грызуныморковьводаабрикоскапуста
Кошкиводакапустаморковь
Собакиабрикосморковькапуста

А надо получить вот так:
Птицыабрикосводакапустаморковь
Грызуныабрикосводакапустаморковь
Кошкиводакапустаморковь
Собакиабрикоскапустаморковь

Ну или вот так:
Грызуныабрикосводакапустаморковь
Кошкиводакапустаморковь
Птицыабрикосводакапустаморковь
Собакиабрикоскапустаморковь
т.е. главное чтобы после первого столбца данные были отсортированы по алфавиту
 
rAIR, листы с витаминами как-то связаны со всей этой живностью? Если ДА, то видимо нужна сортировка исключая первые ДВА столбца. Есть еще один момент - с точки зрения компьютера (в кодировке ASC II, ANSI) "*" будет меньше любой буквы или слова, поэтому если тупо выстраивать от наименьшего к наибольшему, то звезды будут в начале строки.

А точнее даже сортировка с 6-го столбца.
Изменено: Anchoret - 11.04.2018 20:23:08
 
))))))))))))))))))))))))))))) да не просто ....
у меня клиент польская аптека чтобы выложить прайс надо сортировать и привести в красивый вид)))
с живностью не связано
по крайней мере я не знаю..
просто для примера))
 
Под данный пример (на витаминах, а не животинах) сортировка с шестого столбца и до упора. Все пустоты и единичные символы в результате сортировки оказываются в хвосте строки. Вроде все таблицы однотипные, должно работать на всех листах с витаминами. Макрос работает с активным листом.
Код
Sub VitaminSort()
Dim arr(), sArr(), a&, b%, emArr(), c%, d%, i%
With ActiveSheet
  arr = .Range(.Cells(2, 6), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Value
  For a = 1 To UBound(arr)
    ReDim sArr(1 To UBound(arr, 2)): emArr = sArr
    c = 1: d = 1
    For b = 1 To UBound(arr, 2)
      If Len(arr(a, b)) > 1 Then
        sArr(c) = arr(a, b): c = c + 1
      Else: emArr(d) = arr(a, b): d = d + 1
      End If
    Next
    If c > 1 Then
      arr(a, 1) = sArr(1)
      If c > 2 Then
        For b = 2 To c - 1
          i = b
          Do While arr(a, i - 1) > sArr(i)
            arr(a, i) = arr(a, i - 1): i = i - 1
            If i = 1 Then Exit Do
          Loop
          arr(a, i) = sArr(i)
        Next
      End If
      If d > 1 Then
        i = 1
        For b = c To UBound(sArr): arr(a, b) = emArr(i): i = i + 1: Next
      End If
    End If
  Next
  .[F2].Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End With
End Sub
 
Спасиб...
Пойду читать что такое макрос и как его едят))))
Не, не реально спасибо, я предполагал что примерно так как-то и будет выглядеть ответ.
Но я просто чуть, чуть умнее "нуба".
Завтра буду разбираться).
Ещё раз спасибо.
 
Доб
Цитата
Anchoret написал:
Вроде все таблицы однотипные, должно работать на всех листах с витаминами. Макрос работает с активным листом.
Доброго часа.
Запустил макрос...
Отсортировал, но))))))))))))
ТО значение что стояло в последней ячейке (буквенное значение) он (макрос) удалил и заменил (!  8-0 )  значением из предпоследней ячейки...
 
Цитата
rAIR написал:
удалил и заменил
Наверное все-таки отсортировал со всеми остальными значениями длиной более одного символа? Т.е. стоит поискать это значение в левой части.

П.С.: Строка читается до последней хоть как-либо отмеченной пользователем (значения/форматы) ячейки. Если вдруг вправа есть что-либо не подлежащее сортировке, то нужно явно указать длину строки в макросе вместо "UsedRange.Columns.Count" до этого столбца. Ну и из очевидного - в описании темы нет четких границ сортируемой области.
Изменено: Anchoret - 12.04.2018 21:12:26
 
(( чет ничего не понял
видео что делал
 
rAIR, печально) Может кто другой предложит более понятный вариант сортировки.
 
Попробую ещё раз может сумбурно...но чет устал

не получается малек видео
 
Цитата
Anchoret написал:
rAIR , печально) Может кто другой предложит более понятный вариант сортировки.
может...
или я поумнею
хотя первое быстрее случится)))

всё одно спасибо)
 
Не далее, как в понедельник мяукал
С приложенным файлом на раз справляется.
Код
Sub мяу()
    Dim r As Range, i&
    Application.ScreenUpdating = False
    With ActiveWorkbook.Worksheets(1)
        For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
            Set r = .Range("F" & i).Resize(, 7)
            With .Sort
                .SortFields.Clear
                .SortFields.Add Key:=r(1) _
                              , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                                xlSortNormal
                .SetRange r
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlLeftToRight
                .SortMethod = xlPinYin
                .Apply
            End With
        Next
    End With
    Application.ScreenUpdating = True

End Sub 
Изменено: RAN - 12.04.2018 23:20:25
 
RAN, ссылочку исковеркали, там пробел затесался, все дело портит своими 20% (%20) :-)
По вопросам из тем форума, личку не читаю.
 
rAIR, что делал макрос:
- брал с активного листа диапазон со столбца F и до последнего хоть как-либо отмеченного пользователем, и со второй строки по последнюю (по ранее указанному принципу)
- этот диапазон помещался в массив
- цикл по строкам
- проверка строки на значения с длиною строки меньше 2-х символов, и все остальные
- менее двух символов отсеиваются в один суб массив, остальные во второй
- теперь сортировка значений длиною более 2-х знаков
- приписка к ним хвостом всех пустот, одиночных знаков и пр.
- т.е. в строке сначала идут слова/фразы отсортированные А-Я, потом всяческие звездочки и пробелы
- после того как макрос пробежался по всем строкам массива идет выгрузка на лист
- т.к. эксель любит в этом случае устанавливать автоперенос текста в ячейке, то дополнительно форматируется высота всех строк таблицы

Дубли не отсеивались.
Изменено: Anchoret - 13.04.2018 05:44:21
 
УХ... встал с утра сейчас семейных по их делам развезу и буду впитывать... спасибо всем... за отклики.
 
Цитата
RAN написал: #12
12 Апр 2018 23:13:35
вот этот макрос не смог ничего с ним поделать не смог запустить из-за "кривизны конечностей"...
но!
Цитата
RAN написал:
Не далее, как в понедельник  мяукал
перешел по ссылке и там взял макрос - Karataev - (-а) и вот он уже сработал на все 100
чуть позже выложу видео
 
вот этот макрос ...

Код
Sub Сортировка()
    
    Dim sh As Worksheet
    Dim lr As Long, i As Long
    
    Application.ScreenUpdating = False
    Set sh = ActiveSheet
    'поиск последней строки с данными по столбцу "A"
    lr = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
    
    sh.Sort.Header = xlNo
    sh.Sort.SortFields.Clear
    sh.Sort.SortFields.Add Key:=sh.Rows(2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    For i = 2 To lr
        sh.Sort.SortFields(1).ModifyKey Key:=sh.Rows(i)
        sh.Sort.SetRange sh.Range(sh.Cells(i, "F"), sh.Cells(i, "AD"))
        sh.Sort.MatchCase = False
        sh.Sort.Orientation = xlLeftToRight
        sh.Sort.Apply
    Next i
    
    Application.ScreenUpdating = True
    MsgBox "Готово!", vbInformation
    
End Sub
Изменено: rAIR - 14.04.2018 11:03:01
 
RAN но вам всё равно спасибо))))
 
rAIR, попробуйте. Код в сообщении нужно оформлять  с помощью кнопки <...>
Страницы: 1
Наверх