Поиск строки

Программирование на Visual Basic for Applications
Dave
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 18.02.2004 (Ср) 11:02
Откуда: Москва

Поиск строки

Сообщение Dave » 18.10.2004 (Пн) 12:10

Нужно написать функцию, которая возвращает номер строки с данными в определенных ячейках равными входящим параметрам, подскажите, плз, как лучше. У меня получилось только так, и то пока по коду до этого места не дошла (не тестировала):
Function FindPartner(PartnerCode As String, PartnerType As String)

FindPartner = 0

rNum = 6
Num = ThisWorkbook.Sheets("Контрагенты").Cells(rNum, 2).Text
Group = ThisWorkbook.Sheets("Контрагенты").Cells(rNum, 3).Text
Cur = ThisWorkbook.Sheets("Контрагенты").Cells(rNum, 4).Text
LanguageId = ThisWorkbook.Sheets("Контрагенты").Cells(rNum, 5).Text
PartType = ThisWorkbook.Sheets("Контрагенты").Cells(rNum, 1).Text

Do While Not (Num = "" Or Group = "" Or Cur = "" Or LanguageId = "")
If Num = PartnerCode And PartType = PartnerType Then
FindPartner = rNum
Num = ""
Else
rNum = rNum + 1
Num = ThisWorkbook.Sheets("Контрагенты").Cells(rNum, 2).Text
Group = ThisWorkbook.Sheets("Контрагенты").Cells(rNum, 3).Text
Cur = ThisWorkbook.Sheets("Контрагенты").Cells(rNum, 4).Text
LanguageId = ThisWorkbook.Sheets("Контрагенты").Cells(rNum, 5).Text
End If
Loop

End Function
Слабый пол сильнее сильного в силу сильной слабости сильного пола к слабому...

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

Сообщение GSerg » 18.10.2004 (Пн) 13:31

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

Function FindPartner(ByVal PartnerCode As Long, PartnerType As String) As Long
  Dim f As Range, last As Long
  Do
    Set f = Worksheets("Контрагенты").Columns(2).Find(PartnerCode, IIf(f Is Nothing, Null, f), xlValues, xlWhole)
    If f Is Nothing Then Exit Function
    If f.Row <= last Then Exit Function
    last = f.Row
    If f.Offset(0, -1).Value = PartnerType Then
      FindPartner = f.Row
      Exit Function
    End If
  Loop
End Function
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Dave
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 18.02.2004 (Ср) 11:02
Откуда: Москва

Сообщение Dave » 18.10.2004 (Пн) 14:31

Спасибо, только ругался на тип ячейки, после которой нужно искать, я написала так (мне нужно с 6-ой строки искать):
Код: Выделить всё
Function FindPartner(PartnerCode As String, PartnerType As String) As Long
  Dim f As Range, fR As Range, last As Long
  last = 6
  Do
    Set f = Worksheets("Контрагенты").Columns(2).Find(PartnerCode, Cells(last, 2), xlValues, xlWhole)
    If f Is Nothing Then Exit Function
    If f.Row <= last Then Exit Function
    last = f.Row
    If f.Offset(0, -1).Value = PartnerType Then
      FindPartner = f.Row
      Exit Function
    End If
  Loop
End Function
Слабый пол сильнее сильного в силу сильной слабости сильного пола к слабому...

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

Сообщение GSerg » 18.10.2004 (Пн) 14:49

Неправильно...
Если первым поиском будет найдено partnercode, но на этой строке будет не тот partnertype, то поиск уйдёт в бесконечную петлю. Или выдаст 0, фиг его знает.

Если уж так, то вместо last=6 нужно написать
set f=worksheets("Контрагенты").cells(5,2)

А команда поиска будет Set f = Worksheets("Контрагенты").Columns(2).Find(PartnerCode, f, xlValues, xlWhole)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Dave
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 18.02.2004 (Ср) 11:02
Откуда: Москва

Сообщение Dave » 19.10.2004 (Вт) 8:27

Не соглашусь, все ищет правильно (в себя не уходит), т.к. тестировала - ставила сначала строку с искомым partnercod, а partnertype был не тот - все сработало (мы же номер строки запоминаем). Но новый предложенный вариант тоже катит.
Слабый пол сильнее сильного в силу сильной слабости сильного пола к слабому...

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

Сообщение GSerg » 19.10.2004 (Вт) 10:06

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


Вернуться в VBA

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

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 69

    TopList