Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2010, 23:43   #1
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию Не могу найти ошибку

Почему формула в 5-й строке не выдает тех же результатов, что и формулы в строках 1-4? Что я написал не так?
Спасибо!
Вложения
Тип файла: rar Книга404.rar (5.5 Кб, 29 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.09.2010, 00:31   #2
аналитика
Форумчанин
 
Регистрация: 14.05.2009
Сообщений: 311
По умолчанию

у меня вот что
Изображения
Тип файла: jpg Безымянный.jpg (67.4 Кб, 138 просмотров)
аналитика вне форума Ответить с цитированием
Старый 17.09.2010, 01:48   #3
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Поиск "Пусто" в массиве даст "#ЗНАЧ" или "#Н/Д". В С5 - пусто.
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 17.09.2010, 11:56   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в D5 записана формула
=PosPlus(RC2)
где PosPlus это
Код:
Function PosPlus(iRow As Long)
  PosPlus = Application.WorksheetFunction.Match(Range("C" & iRow) + Range("B" & iRow), Range("A1:A5"))
End Function
Мысль такая, если для PosPlus дать параметр 1,2,3,4 - она должна вернуть тоже, что и формулы в D1, D2, D3, D4... а не тут-то было
Serge 007, если В5 написать 5, то действительно будет искать значение из С5, а там пусто...
Продолжим...
Всего-то одна строка кода и одна формула, почему WorksheetFunction.Match не выдает тех же результатов, получая те же параметры. Даже вопрос не так, почему он вообще ничего не выдает???
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.09.2010, 12:16   #5
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Serge 007, если В5 написать 5, то действительно будет искать значение из С5, а там пусто...
IgorGO, Вы профи с большой буквы, но я ещё раз скажу, если PosPlus(RC2), эт тоже что и =ПОИСКПОЗ($C5+$B5;$A:$A), то если в С5, вписать 5, то поиск ограничится #Н/Д. И вообще, в всё что Вы впишите в С5 не будет находится в столбце А, то результат будет одинаков...
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 17.09.2010, 12:47   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Если написать так:
Код:
Function PosPlus(ByVal iRow As Long)
    PosPlus = Application.Match(Range("C" & iRow) + Range("B" & iRow), Range("A1:A5").Value, 1)
End Function
то функция что-то начинает выдавать.

И ещё, как я понял, Application.WorksheetFunction.Match и Application.Match - разные функции
EducatedFool вне форума Ответить с цитированием
Старый 17.09.2010, 13:01   #7
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

У меня вот так заработало:
Код:
Function PosPlus(iRow As Long) As Double
   Dim wsh As Worksheet
   Set wsh = ActiveSheet
   With wsh
       PosPlus = WorksheetFunction.Match(.Cells(iRow, 3) + .Cells(iRow, 2), .Range("A1:A5"))
   End With
End Function
nilem вне форума Ответить с цитированием
Старый 17.09.2010, 13:04   #8
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

В WorksheetFunction.Match первым аргументом не должно быть выражение получающее "не адресное" значение. В результате приведения типов должен получиться ранг.
Код:
?Application.WorksheetFunction.Match(Cells(4,3), Range("A1:A5"), 0) ' работает
?Application.WorksheetFunction.Match ([C4], Range("A1:A5"), 0) ' работает
?Application.WorksheetFunction.Match(Cells(4,3)+0, Range("A1:A5"), 0) ' не работает RTE 1004
?Application.WorksheetFunction.Match ([C4]+0, Range("A1:A5"), 0) ' не работает RTE 1004
И это понятно ибо первый аргумент должен быть рангом а не значением.
И действительно:
Application.WorksheetFunction.Match (CDate("13.09.2010 7:21:57"), Range("A1:A5"), 0)
Даст всё ту же ошибку 1004
Хочу заментить что WorksheetFunction не идентичен функциям рабочего
листа. Хотя это и оксюморон ...
Реализующий код по всей видимости несколько разнится.

Последний раз редактировалось Aent; 17.09.2010 в 13:19.
Aent вне форума Ответить с цитированием
Старый 17.09.2010, 13:23   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вариант с именованным диапазоном и без него:

Код:
Function PosPlus(ByRef s)
    PosPlus = Application.Match(s, Range("A:A"), 1)
End Function

Function PosPlus2()
    Application.Volatile True
    PosPlus2 = Application.Match([rc2+rc3], Range("A:A"), 1)
End Function


Посмотрите формулы в желтых ячейках

Последний раз редактировалось EducatedFool; 17.09.2010 в 13:37.
EducatedFool вне форума Ответить с цитированием
Старый 17.09.2010, 13:47   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

спасибо всем!
сняли меня с мертвого якоря, а то я по 10 кругу чего уже только не подставлял в качестве параметром, а результата все нет и нет. Появились идеи, уверен что добью.
3-й день в Коктебеле, жарко, может местный климат не благоприятный для умственной деятельности или может мне умственная деятельность противопоказана? Хотя, ничего такого, что могло повлиять на мозг не принимал, несмотря на обилие вин, коньяков и прочих... соблазнов
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу найти ошибку Berg_13 Помощь студентам 0 16.05.2010 21:53
Не могу найти ошибку maxistudent Общие вопросы C/C++ 6 29.04.2010 20:52
не могу найти ошибку! novi4ok_Delphi Помощь студентам 4 24.04.2010 21:46
С++. не могу найти ошибку world12_tk Помощь студентам 3 25.07.2009 10:47
Не могу найти ошибку! Эдуард Общие вопросы C/C++ 7 27.02.2008 16:34