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

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

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

Восстановить пароль

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

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

Код:
Function Pos_V_in_Rg(V, Rg As Range) As Long
  Dim i As Long, p As Long, d As Double
  If WorksheetFunction.CountIf(Rg, V) > 0 Then
    p = WorksheetFunction.Match(V, Rg, 0)
  Else
    For i = 1 To Rg.Cells.Count
      If Rg.Cells(i) > V Then d = (Rg.Cells(i) - V) ^ 2: p = i: Exit For
    Next
    For i = i + 1 To Rg.Cells.Count
      If Rg.Cells(i) > V And (Rg.Cells(i) - V) ^ 2 < d Then d = (Rg.Cells(i) - V) ^ 2: p = i
    Next
  End If
  Pos_V_in_Rg = p
End Function
первый арргумент функции - диапазон, в котором искать значение, предполагается стока или столбец с числами (не матрица)
второй аргумент - что ищем, может быть конкретное значение (число), а может быть ссылка на ячейку с значением.

если функция вернула 0, значит в диапазоне нет чисел больше или равных искомому.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 04.09.2012 в 15:38.
IgorGO вне форума Ответить с цитированием
Старый 04.09.2012, 15:43   #12
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
Сообщение от MaxxVer Посмотреть сообщение
хочу переложить ее потом на VBA (а в VBA у меня знания не густые..).
Выделите ячейку с формулой, Alt+F11, Ctrl+G (окно Immediate редактора VBA). Введите команду
Код:
?activecell.Formula
Получится
Код:
=MATCH(MIN(IF(A4:A26>A1,A4:A26)),A4:A26,)
Допишите к строке функцию вычисления формулы и тут же получите ответ:
Код:
?evaluate("MATCH(MIN(IF(A4:A26>A1,A4:A26)),A4:A26,)")
 7
Работает! Можете переносить в текст программы. Чтобы использовать другие диапазоны, подставьте их адреса в строку с функцией.
Использование формул листа в VBA - чаще всего наиболее эффективный способ вычислений, если данные берутся с листа.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 04.09.2012, 15:49   #13
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Казанский, спасибо, очень полезное знание!
IgorGO, спасибо заранее, т.к. еще не разобрался как работает код...
MaxxVer вне форума Ответить с цитированием
Старый 04.09.2012, 17:14   #14
ShAM66
Форумчанин
 
Регистрация: 24.02.2012
Сообщений: 160
По умолчанию

ЗЫ: Только заметил. В моих формулах "=" нужно убрать (вместо "<=" писать просто "<").
А у Алексея (Казанский), наоборот добавить, т.е. ">=".
Иначе при точном совпадении искомого значения с одним из значений в диапазоне поиска оно проигнорируется и будет искаться "ближайшее большее".

ЗЫ2: Алексей, спасибо, что формулы посокращали. Просто идиотская привычка все сравнивать с 0.
ShAM66 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция ИНДЕКС и ПОИСКПОЗ magana Microsoft Office Excel 9 01.04.2013 10:15
Функции ИНДЕКС и ПОИСКПОЗ- результат #H как исправить? Заранее спасибо. Olga_T Microsoft Office Excel 4 02.09.2012 02:32
Заминка с ИНДЕКС + ПОИСКПОЗ Acro Microsoft Office Excel 3 07.12.2011 16:24
функция поискпоз Olya1985 Microsoft Office Excel 1 27.03.2011 12:25
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33