Имя: Пароль:
IT
 
Организация быстрого поиска в Excel при выполнении макроса
0 Russkiy
 
02.09.11
10:40
Привет, ребята!

У меня возникло затруднение при решении следующей задачи. Для быстрой обработки данных мне необходимо в макросе (Excel) задействовать встроенный механизм поиска - тот, что запускается через иконку в виде бинокля. Поскольку этот механизм очень проворен - находит заданные данные значительно быстрее перебора ячеек, устроенного конструкцией типа "If Cells(... ,...) = ... Then...". Через Интернет нашёл подходящий фрагмент (привожу здесь уже несколько переделанным под свою конкретную задачу):

Sub ПоискИндНомераПозиции()

Dim Результат As Range
Dim Строка As Long
Dim Колонка As Integer
Dim Артикул As String
Dim ИндНомер As Long
Dim ИндНомера As String

Артикул = ActiveCell.Value

1   Application.ThisWorkbook.Sheets("Инд. номера книг").Select

   Set Результат = Columns("A:O").Find(What:=Артикул)

If Результат Is Nothing Then
   MsgBox "Найдены индивидуальные номера книги:" & ИндНомера
   GoTo 2
Else
   Строка = Результат.Row
   Колонка = Результат.Column
   ИндНомер = 65536 * (Колонка - 1) + Строка
   ИндНомера = ИндНомера & " " & CStr(ИндНомер)

   Range("A1").Select
   ActiveCell.Offset(Строка - 1, Колонка - 1).Activate

   Application.ThisWorkbook.Sheets("Наш ассортимент").Select

   GoTo 1

End If

2   End Sub

   При отработке этой процедуры мне нужно, чтобы поиск данных производился по всему заданному диапазону (Columns("A:O")), и не останавливался бы при нахождении первого же результата, совпадающего с заданной (Артикул). Как это происходит при поиске средствами встроенной функции поиска: ведь там после того, как находится первая ячейка с нужным содержимым, процедура не отключается, а приостанавливается и позволяет продолжить поиск далее по листу с того места, на котором остановилась.

   Здесь же вышеприведённая процедура задумана так, чтобы поиск прошёл непрерывно по всему заданному диапазону с накоплением найденных данных (с их трансформацией через пересчёт) в переменной "ИндНомера". То есть, после того, как в пределах заданного диапазона найдена первая ячейка с искомым содержимым, это содержимое трансформируется и запоминается в переменной "ИндНомера", а процесс возвращается к дальнейшему поиску. Но проблема в том, что этот самый дальнейший поиск начинается вновь с начала заданного диапазона, а не с места, где было найдено первое совпадающее значение ячейки, невзирая на то, что в строках "Range("A1").Select" и "ActiveCell.Offset(Строка - 1, Колонка - 1).Activate" я надеялся задать место продолжения поиска: увы, это не работает... В результате процедура работает бесконечно, всё время повторяя один и тот же фрагмент, связанный с первым находимым значением, совпадающим с заданием. И переменная "ИндНомера" быстро разрастается, пополняясь одним и тем же фрагментом...

   Я надеюсь, что понятно объяснил ситуацию. Не найдётся ли среди вас специалист, знающий, как заставить эту процедуру продолжать поиск с места, в котором было найдено очередное подходящее значение? Как это сделать?
1 shamannk
 
02.09.11
10:45
(0) Делай в блокноте он быстрей и круче) Или как вариант береста
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан