powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA: Как быстрее всего искать в рендже
12 сообщений из 12, страница 1 из 1
VBA: Как быстрее всего искать в рендже
    #39200588
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макросом перебираю ячейки и это ппц как долго.
Пытаюсь использовать Columns(1).Find("123") но не могу понять как мне разобрать нашлось или нет, подскажите.
...
Рейтинг: 0 / 0
VBA: Как быстрее всего искать в рендже
    #39200618
hclubmk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык, Find возвращает Range. Если результат Is Nothing - значит ничего не нашлось.
...
Рейтинг: 0 / 0
VBA: Как быстрее всего искать в рендже
    #39200679
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
    fOrder = Str(Cells(x, 8))
    fCell = Cells(x, 8)
    fCell = Sheets(2).Columns("D").Find(fOrder)



Дает ошибку в аттаче.
...
Рейтинг: 0 / 0
VBA: Как быстрее всего искать в рендже
    #39200699
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петров Андрей, хорошо бы параметры поиска указать - формулы/значения, часть/целиком. Запишите макрорекордером.
А вообще в столбце или строке функция ПОИСКПОЗ, в VBA Worksheetfunction.Match, быстрее ищет.
...
Рейтинг: 0 / 0
VBA: Как быстрее всего искать в рендже
    #39200730
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А напомните как правильно настроить
Application.Match(fOrder, Worksheets(2).Columns(4), -1)

Что указывать чтобы оно искало значения по человечески?
Не ищет ведь ни с 0 ни с 1 ни с -1
...
Рейтинг: 0 / 0
VBA: Как быстрее всего искать в рендже
    #39200735
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и полный вызов Find:

Код: vbnet
1.
2.
3.
4.
    fCell = Sheets(2).Cells(2, 4)
    fCell = Sheets(2).Columns(4).Find(What:=fOrder, After:=fCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)



Дает ошибку:
...
Рейтинг: 0 / 0
VBA: Как быстрее всего искать в рендже
    #39200775
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и? Либо устраните несоответствие типов, либо приводите более полный код. Нам-то откуда знать, может fOrder=Null
...
Рейтинг: 0 / 0
VBA: Как быстрее всего искать в рендже
    #39200783
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там заполненная строка.
Поставил константу и получаю ошибку. Так нельзя вызывать чтоли? А как тогда вызвать его?

Нашел пример https://msdn.microsoft.com/en-us/library/office/ff839746.aspx
Или для колонок нельзя вызвать Find?
...
Рейтинг: 0 / 0
VBA: Как быстрее всего искать в рендже
    #39200784
Петров Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вызов, который дает ошибку:
Код: vbnet
1.
    fCell = Sheets(2).Columns("D").Find(What:="765447643", LookIn:=xlValues)
...
Рейтинг: 0 / 0
VBA: Как быстрее всего искать в рендже
    #39200792
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Set потерян
...
Рейтинг: 0 / 0
VBA: Как быстрее всего искать в рендже
    #39200794
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Петров АндрейВызов, который дает ошибку:
Код: vbnet
1.
    fCell = Sheets(2).Columns("D").Find(What:="765447643", LookIn:=xlValues)

Ошибка про Activate не может быть на этой строке, она на строке с Activate как минимум должна быть
...
Рейтинг: 0 / 0
VBA: Как быстрее всего искать в рендже
    #39200813
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петров АндрейНу и полный вызов Find:

Код: vbnet
1.
2.
    fCell = Sheets(2).Cells(2, 4)
    fCell = Sheets(2).Columns(4).Find(What:=fOrder, After:=fCell, LookIn:=xlFormulas, _


Дает ошибку:Естественно: в 1 строке fCell присваивается ЗНАЧЕНИЕ ячейки, а параметру After:= надо присваивать ССЫЛКУ на ячейку. И почему бы не сделать это прямо там:
Код: vbnet
1.
2.
3.
4.
5.
6.
Dim fCell as range
'...
Set fCell = Sheets(2).Columns(4).Find(What:=fOrder, After:=Sheets(2).Cells(2, 4), LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
If Not fCell Is Nothing then 'найдено
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA: Как быстрее всего искать в рендже
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]