powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
10 сообщений из 10, страница 1 из 1
Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
    #38261121
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не смог я справиться - поддержите знаниями!
Дело такое. Хочу я в VBA применить функцию листа ПОИСКПОЗ(). Пишу такую строку:

Код: vbnet
1.
Proba=Application.WorksheetFunction.Match(AAA, Sheets("Справочники").Range("C8:C1000000"), 0)



Всё бы хорошо, но переменной ААА в диапазоне может не оказаться и VBA выдаёт ошибку. Как её обойти при отсутствии в диапазоне искомого значения, так и не понял. Пробовал так:

Код: vbnet
1.
Proba=IsEmpty(Application.WorksheetFunction.Match(AAA, Sheets("Справочники").Range("C8:C1000000"), 0))


не помогло.

Код: vbnet
1.
Proba=IsError(Application.WorksheetFunction.Match(AAA, Sheets("Справочники").Range("C8:C1000000"), 0))


не помогло.

Код: vbnet
1.
Proba=Application.WorksheetFunction.IsNA(Application.WorksheetFunction.Match(AAA, Sheets("Справочники").Range("C8:C1000000"), 0))


не помогло.

ОШИБКА # 1004: Невозможно получить свойство Match.
...
Рейтинг: 0 / 0
Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
    #38261122
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valll,

Попробуйте так:
Код: vbnet
1.
Application.Match(AAA, Sheets("Справочники").Range("C8:C1000000"), 0)
...
Рейтинг: 0 / 0
Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
    #38261135
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему нужна именно функция листа? Чем вас не устраивает поиск?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
With Sheets("Справочники").Range("C8:C1000")
    Set c = .Find(aaa, LookIn:=xlValues)
    If Not c Is Nothing Then
        Debug.Print c.Value
'            Do
'                Set c = .FindNext(c)
'            Loop While Not c Is Nothing
    Else
        Debug.Print "Not found"
    End If
End With
...
Рейтинг: 0 / 0
Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
    #38261136
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ура! Получилось! Спасибо за помощь! С делал так:

Код: vbnet
1.
Proba=IsError(Application.WorksheetFunction.Match(AAA, Sheets("Справочники").Range("C8:C1000000"), 0))



Ошибка правильно отработалась. Ну VBA, ну "писатели" - синтаксис как у тех.писателей из "1С".

Вчера купил учебную версию 1С 8.0, покупал у супер-пупер дилеров - офис весь в понтах. Открыл при них руководство... читаю: "ограничение - количество записей в табличных частях объектов - 1000." Спрашиваю что это такое? Весь офис передёрнулся, долго чесали затылки и всем офисом пошли к директору... Он подумал и сказал: "Позвоните НАМ на горячую линию, там девушка грамотная сидит"... Ей долго объясняли и она дала ответ.......... "Это регистры"!!?? Томить я сотрудников больше не стал и вышел.

Ещё раз спасибо!
...
Рейтинг: 0 / 0
Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
    #38261137
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибся с кодом: вот так получилось, как и советовали:

Код: vbnet
1.
Proba=IsError(Application.Match(AAA, Sheets("Справочники").Range("C8:C1000000"), 0))



AndreTM - приму и ваш способ, спасибо. Просто думал так проще...
...
Рейтинг: 0 / 0
Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
    #38261144
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, не... Мой надо ещё усложнять проверками - это же стандартный Find листа, посему ищет, приводя значения к литералам. И находит, например, "3" в ячейке с "1356" :) Так что надо:
Код: vbnet
1.
Set c = .Find(aaa, LookIn:=xlValues, LookAt:=xlWhole)

Зато получаете ответом сразу объект-ячейку, плюс (закомментированное) поиск всех вхождений...
...
Рейтинг: 0 / 0
Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
    #38261421
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Принял, спасибо.
...
Рейтинг: 0 / 0
Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
    #38261623
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM...Зато получаете ответом сразу объект-ячейку, плюс (закомментированное) поиск всех вхождений...
С закоментированным получите бесконечный цикл - см. справку по методу FindNext.

Мне с некоторых пор больше нравится Application.Match. Попробуйте, например, методом Find найти дату, если формат ячеек с датами отличается от стандартного. Или если эти даты являются результатом работы формул.
Получить объект-ячейку, зная ее индекс, очень легко: aaa.Cells(Proba).
Если столбец (строка) поиска упорядочены по возрастанию или убыванию, можно использовать Match с последним аргументом 1 или -1. В этом случае функция работает очень быстро.
...
Рейтинг: 0 / 0
Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
    #38261667
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КазанскийС закоментированным получите бесконечный цикл - см. справку по методу FindNext.С какого перепугу? Это же пример - я ведь могу и другое условие выхода пользоватьКазанскийМне с некоторых пор больше нравится Application.Match. Попробуйте, например, методом Find найти дату, если формат ячеек с датами отличается от стандартного. Или если эти даты являются результатом работы формул.Смысл искать по формату? Ищем дату как число - вот наше кредоКазанскийПолучить объект-ячейку, зная ее индекс, очень легко: aaa.Cells(Proba).С какого? AAA - искомое значение , а не ячейка-объект. Или я что-то пропустил? И ещё не забыть бы учесть смещение от начала диапазона, в котором искали...КазанскийЕсли столбец (строка) поиска упорядочены по возрастанию или убыванию, можно использовать Match с последним аргументом 1 или -1. В этом случае функция работает очень быстро.Это-то понятно. Вот только ТС ненавязчиво намекает нулём, что ему такое не упёрлось. Ну и в пику этому могу сказать, что кроме .FindNext есть ещё .FindPrevious

Хотя в целом - это же был просто пример. Раз захотелось искать функциями листа - право ваше. Я таким не страдаю...
...
Рейтинг: 0 / 0
Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
    #38261686
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

а я в чем-то согласен с Казанским. По поводу поиска дат на листе. Если отображается дата, а там еще и время, то можно на грабли попасть. Да и вообще не всегда корректно с датами поиск работает.
Хотя меня лично и Match не устраивает. Я привык загонять данные в массив и уже по массиву искать. Довольно быстро получается, а где-то даже быстрее, чем Find(с числами, как правило. Текст чуть дольше ищется). Да и условия можно гибче задать.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помогите справиться с такой конструкцией: Application.WorksheetFunction.Match()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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