![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 06.07.2009
Сообщений: 2
|
![]()
Прошу помощи у знатоков. help Попытался нарисовать макрос который в определенном столбце находит все значения по вхождению любых букв, затем меняет шрифт и заливку, а затем их сортирует (хотя может было бы лучше и фильтрует) Причем Sub писался для Perconal, т.е универсалка на кнопку панели управления. С первой частью все хорошо, находим, выделяем, а вот с сортировкой голову сломал , подскажите где ошибка, вот код:
Code Sub НайтиСортировать() Application.DisplayAlerts = False Application.ScreenUpdating = False Dim НачЯч As Range Dim Диап As Range Dim Столб As Range Dim СтартАдр As String Dim Результат As Range Dim Искомое As String Dim НачЯчАдр As String Dim ИскЯч As Range Set НачЯч = ActiveCell НачЯчАдр = ActiveCell.Address Set Столб = Range(Cells(ActiveCell.Column, 1), _ Cells(Range("A65536:IV65536").End(x lUp).Row, ActiveCell.Column)) 'Столб.Select Искомое = "*" & InputBox("Чаво искать будем?") & "*" Set Результат = Столб.Find(Искомое, , , xlWhole) If Not Результат Is Nothing Then СтартАдр = Результат.Address End If Do While Not Результат Is Nothing ' Обработка результата поиска Результат.Interior.ColorIndex = 20 Результат.Font.ColorIndex = 5 ' Новый поиск Set Результат = Столб.FindNext(Результат) If Результат.Address = СтартАдр Then Exit Do End If Loop Range(НачЯчАдр).Select Set Диап = Range(Cells(ActiveCell.Row, 1), _ Cells(Range("A65536:IV65536").End(x lUp).Row, ActiveCell.End(xlToRight).Column)) 'Диап.Select Dim СортЯч As Range Dim НомСтолб As Currency НомСтолб = НачЯч.Column With Диап .Columns(НомСтолб).EntireColumn.Ins ert For Each СортЯч In .Columns(НомСтолб).Cells СортЯч.Offset(, -1).Value = СортЯч.Font.ColorIndex Next .Offset(, 0).Resize(.Rows.Count, .Columns.Count).Select .Sort Key1:=Cells(1, 1).Offset(1, 1) .Columns(НомСтолб).Offset(, -1).EntireColumn.Delete Application.DisplayAlerts = True Application.ScreenUpdating = True End With End Sub Заранее благодарен |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 03.06.2009
Сообщений: 26
|
![]()
Не видел ваших таблиц, но наверное сортировать вам нужно выделенный диапазон, а не изначальный "Диап":
Код:
|
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 06.07.2009
Сообщений: 2
|
![]()
В том то и дело, что таблиц как таковых нет, хотелось сделать универсалку для Personal, т. е. жмем кнопку на панели инструментов, вводим любой текст, в любом месте листа начиная от активной ячейки происходит поиск по маске *текст*, а затем выделяет его и фильтрует по цвету залива или шрифта, ну код я маленько доработал, работает, находит по любому вхождению, выделяет фильтрует, удобно, но возникли следующие вопросы - ищет только по значению, т. е. результат формул и даты в формате дат не ищет, и второя написал Sub, для обратного действия - тоже работает, но если ничего не нашел, то усе. Может кто нибудь подскажет как этих тараканов вывести. Штука удобная может пригодиться всем. Вот измененный код:
Sub НайтиИФильтровать() Application.DisplayAlerts = False Call ScreenOff Dim НачЯч As Range Dim Диап As Range Dim Столб As Range Dim Строк As Range Dim СтартАдр As String ' Хранит координаты первого найденного значения Dim Результат As Range Dim Искомое As String Dim НачЯчАдр As String Dim ИскЯч As Range Dim КолСтр As Integer Dim Цвет As Integer Set НачЯч = ActiveCell НачЯчАдр = ActiveCell.Address Set Столб = Range(Cells(1, ActiveCell.Column), _ Cells(Range("A65536:IV65536").End(x lUp).Row, ActiveCell.Column)) Искомое = "*" & InputBox("Чаво искать будем?") & "*" ' Поиск первого входжения искомого слова Set Результат = Столб.Find(Искомое, , , xlWhole) If Not Результат Is Nothing Then ' Сохраним адрес найденной ячейки (чтобы контролировать зацикливание поиска) СтартАдр = Результат.Address End If Do While Not Результат Is Nothing ' Обработка результата поиска Результат.Interior.ColorIndex = 20 Результат.Font.ColorIndex = 5 ' Новый поиск Set Результат = Столб.FindNext(Результат) If Результат.Address = СтартАдр Then ' Поиск завершен Exit Do End If Loop Dim АктСтолб КолСтр = Столб.Rows.Count АктСтр = НачЯч.Row Цвет = 20 НачЯч.Select АктСтолб = НачЯч.Column For I = АктСтр To КолСтр If Cells(I, АктСтолб).Interior.ColorIndex <> Цвет Then Rows(I).Hidden = True End If Next Application.DisplayAlerts = True Call ScreenOn End Sub Sub Разфильтровать() Call ScreenOff Dim Столб As Range Dim КолСтр As Integer Dim КонСтр Dim НомСтолб As Integer Set Столб = Range(Cells(1, ActiveCell.Column), _ Cells(Range("A65536:IV65536").End(x lUp).Row, ActiveCell.Column)) КолСтр = Столб.Rows.Count КонСтр = Range("A65536:IV65536").End(xlUp).R ow НомСтолб = Столб.Column For I = 1 To КонСтр Cells(I, НомСтолб).Interior.ColorIndex = xlNone Cells(I, НомСтолб).Font.ColorIndex = 1 Next For I = 1 To КолСтр If Rows(I).Hidden = True Then Rows(I).Hidden = False End If Next Call ScreenOn End Sub[/CODE] |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск и сортировка | junkie | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 01.06.2009 17:17 |
Сортировка, поиск, рекурсивный алгоритм Delphi | Stases | Помощь студентам | 4 | 29.05.2009 01:15 |
Сортировка и поиск прямо в файле | Pord | Помощь студентам | 2 | 27.02.2009 18:48 |
Задача:поиск и сортировка.(файл произвольного размера) | xxxBITxxx | Помощь студентам | 3 | 11.01.2009 19:48 |
Академические задачи по с++ (гдз) Сортировка и поиск совпадений по массиву | Andrew#90 | Общие вопросы C/C++ | 2 | 10.01.2009 18:44 |