Нужна помощь! Есть файл с таблицей и макросом, который производит интерполяцию по данным из этой таблицы. Сама интерполяция работает хорошо, только нужно добавить условие на проверку минимума и максимума. Если введенное значение меньше того, что есть в таблице, то вывести в ячейку минимальное значение из таблицы. Аналогично при максимуме. Файл с таблицей и макросом ниже.
Нужна помощь! Есть файл с таблицей и макросом, который производит интерполяцию по данным из этой таблицы. Сама интерполяция работает хорошо, только нужно добавить условие на проверку минимума и максимума. Если введенное значение меньше того, что есть в таблице, то вывести в ячейку минимальное значение из таблицы. Аналогично при максимуме. Файл с таблицей и макросом ниже.maroon333
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
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
Jhonson, спасибо! единственный вопрос по автоматическому пересчету функции. исходное значение для интерполяции берется с ячейки из другого листа, и сейчас пересчета не происходит (все время приходится выделять ячейку с требуемым результатом и нажимать Enter), хотя до этого все было нормально.
Jhonson, спасибо! единственный вопрос по автоматическому пересчету функции. исходное значение для интерполяции берется с ячейки из другого листа, и сейчас пересчета не происходит (все время приходится выделять ячейку с требуемым результатом и нажимать Enter), хотя до этого все было нормально.maroon333
Jhonson, спасибо большое! все работает) только есть еще одна просьба) есть большая вероятность, что в ходе решения задачи может добавиться условие в виде поиска нужного значения и дальнейшей интерполяции в определенном диапазоне. как быть в таком случае? ниже пример (функция Interp осталась):
Jhonson, спасибо большое! все работает) только есть еще одна просьба) есть большая вероятность, что в ходе решения задачи может добавиться условие в виде поиска нужного значения и дальнейшей интерполяции в определенном диапазоне. как быть в таком случае? ниже пример (функция Interp осталась):maroon333