![]() |
|
Организация быстрого поиска в 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) Делай в блокноте он быстрей и круче) Или как вариант береста
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |