Страница 1 из 1

Проблемы с функцией

Добавлено: 10 авг 2004, 07:41
Azazel
Подскажите из-за чего функция scan не хотит пахать (пишет ошибку). Есть подозрение, что это не хочет работать for-next (там обоащение к ячейкам). Если да то как энто дело можно обойти.

PS. Заместо scan встроеную функцию "ПРОСМОТР" не предлагать :) . Она меня не устраивает (работает только с отсортированной инфой а данные сортировать нельзя)

Код функции:

Function scan(FindName As String, InputMassive As String, Znach As String)
Dim FindRowStart As Integer
Dim FindRowEnd As Integer
Dim Massive As Integer

Dim FindColumn As Integer
Dim MassiveColumn As Integer

FindRowStart = Range(GetValue(FindName)).Row
FindRowEnd = Range(GetValue2(FindName)).Row
Massive = Range(GetValue(InputMassive)).Row

FindColumn = Range(GetValue(FindName)).Column
MassiveColumn = Range(GetValue(InputMassive)).Column


For i = FindRowStart To FindRowEnd
If Trim(Znach) = Cells(i, FindColumn).Value Then scan = Cells(Massive, MassiveColumn).Value: Exit Function
Massive = Massive + 1
Next
End Function

Public Function GetValue(a As String) As String
Dim i As Integer
Dim b As String
For i = 1 To Len(a)
If Mid(a, i, 1) = ":" Then GoTo 100
b = b + Mid(a, i, 1)
Next
100:
GetValue = b
End Function

Public Function GetValue2(a As String) As String
Dim i As Integer
Dim b As String
For i = 1 To Len(a)
If Mid(a, i, 1) = ":" Then b = "": GoTo 100
b = b + Mid(a, i, 1)
100:
Next
GetValue2 = b
End Function

Добавлено: 11 авг 2004, 01:58
Naeel Maqsudov
Даже не стал вдаваться в подробности Вашего примера, так как, во-первых, диапазоны не передают в аргумантах типа String, во-вторых, всевозможные выходы из for-next по goto - это плохой стиль. Azazel, это ж не наши методы! :)

Для начала порекомендую функции ГПР и/или ВПР (там можно выбрать метод работы, когда упорядоченность не нужна).

Ну а если они аргументированно Вас не удовлетворят, то тогда перепишем scan, но совершенно по-другому.

Добавлено: 11 авг 2004, 05:25
Azazel
всевозможные выходы из for-next по goto - это плохой стиль
Эт верно. Пьяный был... :) Вдрызг... :cry:

Переписывать scan не надо - ГПР и ВПР вполне устраивают