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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2009, 11:38   #1
sssdog
Новичок
Джуниор
 
Регистрация: 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

Заранее благодарен
sssdog вне форума Ответить с цитированием
Старый 08.07.2009, 14:23   #2
mc-black
Пользователь
 
Аватар для mc-black
 
Регистрация: 03.06.2009
Сообщений: 26
По умолчанию

Не видел ваших таблиц, но наверное сортировать вам нужно выделенный диапазон, а не изначальный "Диап":
Код:
Selection.Sort Key1:=Cells(1, 1).Offset(1, 1)
mc-black вне форума Ответить с цитированием
Старый 10.07.2009, 13:27   #3
sssdog
Новичок
Джуниор
 
Регистрация: 06.07.2009
Сообщений: 2
По умолчанию

Цитата:
Сообщение от mc-black Посмотреть сообщение
Не видел ваших таблиц
В том то и дело, что таблиц как таковых нет, хотелось сделать универсалку для 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]
sssdog вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и сортировка 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