Ох уж этот поиск... Наболело...

Программирование на Visual Basic for Applications
dasker
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 01.10.2003 (Ср) 4:37

Ох уж этот поиск... Наболело...

Сообщение dasker » 07.11.2006 (Вт) 0:23

Привет всем. Долго не решался задать этот вопрос, поскольку тема неоднократно поднималась, но то ли это не вкуриваю, а может не мой случай, в общем не выходит, то что нужно..
Ближе к теме:
есть таблица, в ней столбцы с уникальными значениями , требуется найти определенное значение в выбранном столбце и определить адрес найденной ячейки.
вот что у меня есть.

Код: Выделить всё


Function data_FIND(datax As String)
on error resume next

Sheets("Import 1-65536").Select
Columns("A:A").Select
www = Selection.Find(What:=datax, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

If www <> "" Then
data_FIND = ActiveCell.Row
Else
data_FIND = "not"
End If
End Function



data_FIND должна возвращать номер найденной строки.
Но в результате возвращает 1 видимо из за того что выделен весь столбец вот этим Columns("A:A").Select
Что делать?
Заранее спасибо.
p.s. Написал и подумал, может этим кодом найденная ячейка и не должна выделяться?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Ох уж этот поиск... Наболело...

Сообщение GSerg » 07.11.2006 (Вт) 6:05

dasker писал(а):p.s. Написал и подумал, может этим кодом найденная ячейка и не должна выделяться?

Вах! Маладэц.

Зацени функцию ПОИСКПОЗ вместо написания своей, кстати.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

dasker
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 01.10.2003 (Ср) 4:37

Сообщение dasker » 08.11.2006 (Ср) 13:10

простите за некомпетентность, но эта функция является функцией VBA, или ей надо использовать в формулах?

Это выражение выдает ошибку если его пытаешься использовать в макросе
Код: Выделить всё
ПОИСКПОЗ("Значение";A2:A5;0)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.11.2006 (Ср) 13:22

Открой файл funcs.xls, узри имя ПОИСКПОЗ в английском варианте (MATCH).
Вспомни, как вызываются функции листа из кода.
Вызови функцию MATCH этим самым способом.
Наслаждайся.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Pavel55
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 27.10.2006 (Пт) 20:11

Сообщение Pavel55 » 08.11.2006 (Ср) 17:33

Answer = Application.WorksheetFunction.Match(......)

Вот пример использования функции листа =МИН() - нахождение минимального значения в диапазоне

Код: Выделить всё
Set myRange = Worksheets("Sheet1").Range("A1:C10")
answer = Application.WorksheetFunction.Min(myRange)
MsgBox answer

dasker
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 01.10.2003 (Ср) 4:37

Сообщение dasker » 08.11.2006 (Ср) 18:05

Pavel55 писал(а):Answer = Application.WorksheetFunction.Match(......)

Вот пример использования функции листа =МИН() - нахождение минимального значения в диапазоне

Код: Выделить всё
Set myRange = Worksheets("Sheet1").Range("A1:C10")
answer = Application.WorksheetFunction.Min(myRange)
MsgBox answer



пытаюсь переделать под свои нужды
Код: Выделить всё
Set myRange = Worksheets("Лист1").Range("A1:A44")
answer = Application.WorksheetFunction.Match("5", myRange, 1)
MsgBox answer


при запуске сообщает error 1004
невозможно получить свойство match класса WorksheetFunction
чтото не так делаю?? может проблема в аргументах Application.WorksheetFunction.Match("5", myRange, 1)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33

    TopList