Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Дописать условие для функции - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Дописать условие для функции
maroon333 Дата: Вторник, 17.01.2012, 15:18 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Нужна помощь!
Есть файл с таблицей и макросом, который производит интерполяцию по данным из этой таблицы.
Сама интерполяция работает хорошо, только нужно добавить условие на проверку минимума и максимума.
Если введенное значение меньше того, что есть в таблице, то вывести в ячейку минимальное значение из таблицы. Аналогично при максимуме.
Файл с таблицей и макросом ниже.
К сообщению приложен файл: 9093397.xls (42.5 Kb)
 
Ответить
СообщениеНужна помощь!
Есть файл с таблицей и макросом, который производит интерполяцию по данным из этой таблицы.
Сама интерполяция работает хорошо, только нужно добавить условие на проверку минимума и максимума.
Если введенное значение меньше того, что есть в таблице, то вывести в ячейку минимальное значение из таблицы. Аналогично при максимуме.
Файл с таблицей и макросом ниже.

Автор - maroon333
Дата добавления - 17.01.2012 в 15:18
Jhonson Дата: Вторник, 17.01.2012, 15:42 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

Можно так
Code
=ЕСЛИ(СЧЁТЕСЛИ(A2:A7;">"&E2)=СЧЁТЗ(A2:A7);МИН(B2:B7);ЕСЛИ(ЕОШИБКА(ПОИСКПОЗ(E2;A2:A7;0));МАКС(B2:B7);Interp(E2;A2:A7;B2:B7)))


"Ничто не приносит людям столько неприятностей, как разум."
 
Ответить
СообщениеМожно так
Code
=ЕСЛИ(СЧЁТЕСЛИ(A2:A7;">"&E2)=СЧЁТЗ(A2:A7);МИН(B2:B7);ЕСЛИ(ЕОШИБКА(ПОИСКПОЗ(E2;A2:A7;0));МАКС(B2:B7);Interp(E2;A2:A7;B2:B7)))

Автор - Jhonson
Дата добавления - 17.01.2012 в 15:42
maroon333 Дата: Вторник, 17.01.2012, 15:49 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Jhonson, так-то работает конечно. но желатьльно в коде эти условия добавить (через If - Then), а не через такую громоздкую формулу)
Вот код макроса:

Code
Function Interp(a As Range, Arng As Range, Krng As Range) As Single

Dim al, ks, i As Integer
al = Arng.Value: ks = Krng.Value
Do
     i = i + 1
     Loop While al(i, 1) < a.Value
If al(i, 1) = a.Value Then
     Interp = ks(i, 1)
     Else
Interp = (ks(i, 1) - ks(i - 1, 1)) / (al(i, 1) - al(i - 1, 1)) * (a.Value - al(i - 1, 1)) + ks(i - 1, 1)   
End If
End Function


Сообщение отредактировал maroon333 - Вторник, 17.01.2012, 16:45
 
Ответить
СообщениеJhonson, так-то работает конечно. но желатьльно в коде эти условия добавить (через If - Then), а не через такую громоздкую формулу)
Вот код макроса:

Code
Function Interp(a As Range, Arng As Range, Krng As Range) As Single

Dim al, ks, i As Integer
al = Arng.Value: ks = Krng.Value
Do
     i = i + 1
     Loop While al(i, 1) < a.Value
If al(i, 1) = a.Value Then
     Interp = ks(i, 1)
     Else
Interp = (ks(i, 1) - ks(i - 1, 1)) / (al(i, 1) - al(i - 1, 1)) * (a.Value - al(i - 1, 1)) + ks(i - 1, 1)   
End If
End Function

Автор - maroon333
Дата добавления - 17.01.2012 в 15:49
Jhonson Дата: Вторник, 17.01.2012, 16:52 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

Да пожалуйста
К сообщению приложен файл: 9093397-1-.xls (41.5 Kb)


"Ничто не приносит людям столько неприятностей, как разум."

Сообщение отредактировал Jhonson - Вторник, 17.01.2012, 18:18
 
Ответить
СообщениеДа пожалуйста

Автор - Jhonson
Дата добавления - 17.01.2012 в 16:52
maroon333 Дата: Вторник, 17.01.2012, 17:21 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Jhonson, работает, но при вводе min и max значений берет значения из первого столбца, а не из второго....
 
Ответить
СообщениеJhonson, работает, но при вводе min и max значений берет значения из первого столбца, а не из второго....

Автор - maroon333
Дата добавления - 17.01.2012 в 17:21
IgorGo Дата: Вторник, 17.01.2012, 17:48 | Сообщение № 6
Группа: Друзья
Ранг: Форумчанин
Сообщений: 108
Репутация: 38 ±
Замечаний: 0% ±

или так, вообще без функции
Code
=ЕСЛИ(E2<A2;B2;ЕСЛИ(E2>A7;B7;ЕСЛИ(СЧЁТЕСЛИ(A2:A7;E2)=1;ИНДЕКС(B2:B7;ПОИСКПОЗ(E2;A2:A7;));ПРЕДСКАЗ(E2;СМЕЩ(B1;ПОИСКПОЗ(E2;A2:A7);;2);СМЕЩ(A1;ПОИСКПОЗ(E2;A2:A7);;2)))))
 
Ответить
Сообщениеили так, вообще без функции
Code
=ЕСЛИ(E2<A2;B2;ЕСЛИ(E2>A7;B7;ЕСЛИ(СЧЁТЕСЛИ(A2:A7;E2)=1;ИНДЕКС(B2:B7;ПОИСКПОЗ(E2;A2:A7;));ПРЕДСКАЗ(E2;СМЕЩ(B1;ПОИСКПОЗ(E2;A2:A7);;2);СМЕЩ(A1;ПОИСКПОЗ(E2;A2:A7);;2)))))

Автор - IgorGo
Дата добавления - 17.01.2012 в 17:48
Jhonson Дата: Вторник, 17.01.2012, 18:19 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

В предыдущем посте файл перезалил.


"Ничто не приносит людям столько неприятностей, как разум."
 
Ответить
СообщениеВ предыдущем посте файл перезалил.

Автор - Jhonson
Дата добавления - 17.01.2012 в 18:19
maroon333 Дата: Среда, 18.01.2012, 10:51 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Jhonson, спасибо! единственный вопрос по автоматическому пересчету функции. исходное значение для интерполяции берется с ячейки из другого листа, и сейчас пересчета не происходит (все время приходится выделять ячейку с требуемым результатом и нажимать Enter), хотя до этого все было нормально.
 
Ответить
СообщениеJhonson, спасибо! единственный вопрос по автоматическому пересчету функции. исходное значение для интерполяции берется с ячейки из другого листа, и сейчас пересчета не происходит (все время приходится выделять ячейку с требуемым результатом и нажимать Enter), хотя до этого все было нормально.

Автор - maroon333
Дата добавления - 18.01.2012 в 10:51
Jhonson Дата: Среда, 18.01.2012, 10:55 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

добавьте вначале функции строчку:
Code
Application.Volatile True


"Ничто не приносит людям столько неприятностей, как разум."
 
Ответить
Сообщениедобавьте вначале функции строчку:
Code
Application.Volatile True

Автор - Jhonson
Дата добавления - 18.01.2012 в 10:55
maroon333 Дата: Среда, 18.01.2012, 12:35 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Jhonson, спасибо большое! все работает)
только есть еще одна просьба) есть большая вероятность, что в ходе решения задачи может добавиться условие в виде поиска нужного значения и дальнейшей интерполяции в определенном диапазоне. как быть в таком случае? ниже пример (функция Interp осталась):
К сообщению приложен файл: 0972373.xls (38.0 Kb)


Сообщение отредактировал maroon333 - Среда, 18.01.2012, 12:35
 
Ответить
СообщениеJhonson, спасибо большое! все работает)
только есть еще одна просьба) есть большая вероятность, что в ходе решения задачи может добавиться условие в виде поиска нужного значения и дальнейшей интерполяции в определенном диапазоне. как быть в таком случае? ниже пример (функция Interp осталась):

Автор - maroon333
Дата добавления - 18.01.2012 в 12:35
Jhonson Дата: Среда, 18.01.2012, 14:17 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

Используйте смещ() и поискпоз()
см.файл
К сообщению приложен файл: 4589969.xls (39.0 Kb)


"Ничто не приносит людям столько неприятностей, как разум."
 
Ответить
СообщениеИспользуйте смещ() и поискпоз()
см.файл

Автор - Jhonson
Дата добавления - 18.01.2012 в 14:17
maroon333 Дата: Среда, 18.01.2012, 16:03 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Jhonson, отлично! все круто! благодарю.
 
Ответить
СообщениеJhonson, отлично! все круто! благодарю.

Автор - maroon333
Дата добавления - 18.01.2012 в 16:03
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!