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



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

Что указывать чтобы оно искало значения по человечески?
Не ищет ведь ни с 0 ни с 1 ни с -1
...
Рейтинг: 0 / 0
25.03.2016, 15:18
    #39200735
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: Как быстрее всего искать в рендже
Ну и полный вызов 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
25.03.2016, 16:03
    #39200775
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: Как быстрее всего искать в рендже
Ну и? Либо устраните несоответствие типов, либо приводите более полный код. Нам-то откуда знать, может fOrder=Null
...
Рейтинг: 0 / 0
25.03.2016, 16:15
    #39200783
Петров Андрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: Как быстрее всего искать в рендже
Там заполненная строка.
Поставил константу и получаю ошибку. Так нельзя вызывать чтоли? А как тогда вызвать его?

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

Ошибка про Activate не может быть на этой строке, она на строке с Activate как минимум должна быть
...
Рейтинг: 0 / 0
25.03.2016, 16:47
    #39200813
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: Как быстрее всего искать в рендже
Петров АндрейНу и полный вызов 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
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / VBA: Как быстрее всего искать в рендже / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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