Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2009, 08:21   #1
Sirius2w
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 22
По умолчанию Сортировка по столбцу А? не могу разобраться

Добрый день.
Ну жен совет как отсортировать содержимое строк по данным в столбце А.
Данные в стобце "А" могут начинаться с любой буквы русского и латинского алфавита и далее числовое значение от 0 до 999.
примерно в таком формате "А-1,А-2,Б-9, Э-16,Ю-2,Ю-3,Ю-24" некоторые строки могут не иметь позиции - их в самый конец.
Но отсортировать их нужно в первую очередь по алфавиту, во вторую очередь по цофровому значению после буквы
вот файл: Это исходник
Вложения
Тип файла: rar спец.rar (8.6 Кб, 14 просмотров)

Последний раз редактировалось Sirius2w; 10.12.2009 в 09:57.
Sirius2w вне форума Ответить с цитированием
Старый 10.12.2009, 09:17   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно выполнить макрос:
Код:
Sub Main()
    Dim i As Long, j As Long: Application.ScreenUpdating = False
    j = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count: Cells(1, j) = "ServiceValue"
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(i, 1) Like "?-#*" Then Cells(i, j) = Split(Cells(i, 1), "-")(1) Else Cells(i, j) = 100000
    Next
    ActiveSheet.UsedRange.Sort Key1:=Cells(1, j), Order1:=xlAscending, Header:=xlYes: Columns(j).Delete
End Sub
Пример во вложении.
Вложения
Тип файла: rar спец_2.rar (9.9 Кб, 26 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 10.12.2009, 09:36   #3
Sirius2w
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 22
По умолчанию

SAS888 ;-) большое спасибо , что откликнулись но...
Не совсем так... прошу прощения, может я некорректно сформулировал вопрос
порядок сортировки должен выполняться сначала по алфавиту, но внутри дипапзона начинающегося на одну и ту же букву тоже должен быть порядок - по цифрам примерно так А-1,А-2,А-3,.....Б-1,Б-2,Б-3...
Эта таблица заполняется автоматически при извлечении данных с файла автокада. В файле автокада может меняться количество блоков с информацией и наименование позиций может быть совсем разным, но все начинаются сначала с буквы (она определяет группу к которой относиться объект) а затем порядковый номер "Т-47" тут буква "т" определяет группу "Тренажеры" "47" определяет порядковый номер тренажера...
Sirius2w вне форума Ответить с цитированием
Старый 10.12.2009, 09:46   #4
Sirius2w
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 22
По умолчанию

Вообще как без макросов упорядочить записи типа
А-1
А-10
А-11
А-11
А-12
А-13
А-14
А-15
А-16
А-17
А-18
А-19
А-2
А-20
А-21
А-22
А-23
А-24
А-25
А-26
А-27
А-3
А-4
А-5
А-6
А-7
А-8
А-9
ну и так для каждой буквы алфавита
через Сервис=параметры=списки = задать свой новый список неприемлимо, так как однозачного списка нельзя создать из-за постоянно изменяемых данных
Sirius2w вне форума Ответить с цитированием
Старый 10.12.2009, 11:31   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

на основании колонки "номер" сформировал дополнительную колонку "сорт" - по ней и сортировать. только это все полумеры:
1.формула написана на основании того, что я увидел в колонке "номер". я даже не пытался охватить все буйство фантазии, на которое способны пользователи при заполнении колонки "номер"
2.формулу надо постоянно разможать вниз по списку (если не установлен режим автозаполнения колонок)

Кстати, формула написана так, что если после А появится номер А-101, то он не посортируется между А-10 и А-11, а у А-10 и А-11 появятся дополнительные нолики А-010 и А-011 и т.д. Но это все равно не спасет от пользователей (точнее от их способности вставить туда номер не влезающий в правила).

а вообще, мой вам совет: формализуйте правила заполнения колонки "номер", попытайтесь сделать проверку на вводимое
Вложения
Тип файла: rar Книга225.rar (11.5 Кб, 16 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 10.12.2009, 11:50   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
может я некорректно сформулировал вопрос
Может так, а может я не правильно понял. Так или иначе, с помощью макроса задачу можно решить, например, так:
Код:
Sub Main()
    Dim i As Long, j As Long: Application.ScreenUpdating = False
    j = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count
    Cells(1, j) = "ServiceValue1": Cells(1, j + 1) = "ServiceValue2"
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(i, 1) Like "?-#*" Then
            Cells(i, j) = Split(Cells(i, 1), "-")(0): Cells(i, j + 1) = Split(Cells(i, 1), "-")(1)
        Else
            Cells(i, j) = "яяяя": Cells(i, j + 1) = 100000
        End If
    Next
    ActiveSheet.UsedRange.Sort Key1:=Cells(1, j), Order1:=xlAscending, _
        Key2:=Cells(1, j + 1), Order2:=xlAscending, Header:=xlYes
    Columns(j).Delete: Columns(j + 1).Delete
End Sub
Решение при помощи формул давать не берусь. К тому же, в данном случае, макрос предпочтительнее. Пример во вложении.
Вложения
Тип файла: rar спец_3.rar (10.1 Кб, 22 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 10.12.2009, 12:02   #7
Sirius2w
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 22
По умолчанию

IgorGO, спасибо, хороший вариант решения!
SAS888 - вы совершенно правильно поняли, 2-й вариант именно то что нужно.!!! ОГРОМНОЕ СПАСИБО!

П.С. Я тут еще один способ нарыл - создаем правее столбца "номер" его копию, а еще правее пустой столбец. Далее выделяеме скопированный диапазон "номер" потм в пункте меню "Данные" = "Текст по столбцам..." = "далее" = указываем знак разделяющий буквы и цыфры ( внашем случае "-") = готово. После чего выделяем весь заполненный диапазон и сортируем с условиями "по буквам" "затем по цифрам"
Sirius2w вне форума Ответить с цитированием
Старый 10.12.2009, 12:25   #8
Sirius2w
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 22
По умолчанию

А можно еще просьбу? есть столбец с именем "Примечание" в нем заполнены только отдельные строки, они привязаны к конкретной позиции например поз. А-10 в файле.
Можно ли как-то ниже строки с позицией А-10 добавить строку и в ячейку ниже наименования позиции А-10 перенести значение "примечания" этой же позиции тоже проделать со всеми непустыми ячейками столбца "примечание" после чего полностью удалить столбец "примечание"
возможно ли это учесть в том макросе, который Вы мне написали?
П.С. с меня магарыч ;-)
Sirius2w вне форума Ответить с цитированием
Старый 10.12.2009, 13:12   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Так нужно?
Вложения
Тип файла: rar спец_4.rar (10.5 Кб, 33 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 10.12.2009, 13:35   #10
Sirius2w
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 22
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Так нужно?
ОБАЛДЕТЬ!!!!! я просто в шоке!!!! как я могу Вас отблагодарить????
все правильно только данные в столбец "В" нада помещать....
Sirius2w вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу разобраться Var17 Общие вопросы Delphi 6 27.03.2010 01:21
Не могу разобраться Zmaxer Помощь студентам 24 10.10.2009 18:52
не могу разобраться Инспектор ГУЛ Свободное общение 7 20.09.2009 09:29