Здравствуйте форумчане, прошу помощи в решении такой задачки
например в ячейку ввожу плотность 0,6501 и температуру 15
она лежит в диапазоне А2:В2 те в диапазоне от 0,6500 до 0,6590 тогда нужно присвоить соответствующее значение поправки С2 те 0,000962 или найти другое соответствующее если плотность другая
и рассчитываю плотность при 20 градусах по формуле =0,6501(плотность которую ввели)+0,000962(поправка)*(15(введенная нами температура)-20(температура 20))
т.е =0,6501+0,000962*(15-20) должно получится 0,64529
если такого диапазона нет например число 0,5999 или 1,0100 то выдать сообщение неправильный ввод плотности
Привет. Проверяйте: =D1+ВПР(D1;$A$2:$C$36;3;1)*(E1-E2) Или так с сообщением о неверных данных: =ЕСЛИОШИБКА(D1+ВПР(D1;$A$2:$C$36;3;1)*(E1-E2);"Нет такой плотности")
Уточнение (в смысле - занудство ) Единственная (в одной ячейке) формула: Плотность_при_20_градусах = Плотность_при_температуре + Поправка * (Температура - 20) - это только первое приближение - поправка берётся из таблицы для плотности жидкости при 20°С ! Но эта поправка была найдена для плотности при заданной температуре. Если температура значительно отличается от 20 градусов, то результат будет не точным. Необходимо найти поправку для вычисленной (в первом приближении) Плотности_при_20_градусах, и пересчитать по формуле в другой ячейке, повторить в третьей, и т.д., пока абсолютная разность последнего и предыдущего рассчитанных значений плотности не станет меньше 0,0001 .
Вадим написал: да совершенно верно ... вижу ошибку
Ну, заметная разница - если температура отлична от 20 на больше ± 15 градусов.
Цитата
Вадим написал: реализовать как то в моем журнале нужно чтоб в одной ячейке все считало
В одной ячейке - только функцией-макросом (UDF) :
Код
Function ПлотностьНП20(Температура As Double, Плотность As Double)
Const A0 As Double = 1.82568067226891E-03
Const A1 As Double = -1.3175350140056E-03
Dim D1 As Double, D2 As Double, B As Double, I As Long
D1 = Плотность
For I = 1 To 5
B = A0 + A1 * D1
D2 = Плотность + B * (Температура - 20)
If Abs(D2 - D1) < 0.00001 Then Exit For
D1 = D2
Next
If I <= 5 Then
If B <= 0.000976 And B >= 0.000501 Then ПлотностьНП20 = D2 Else ПлотностьНП20 = "неправильный ввод плотности"
Else
ПлотностьНП20 = CVErr(xlErrValue)
End If
End Function
Что хорошо - таблица на листе не нужна - она "зашита" в коэффициентах A0, A1.
С.М. написал: Что хорошо - таблица на листе не нужна - она "зашита" в коэффициентах A0, A1.
Спасибо всем за помощь пробую переместить на рабочий вариант... почему то сразу после перемещения в ячейке присваивается имя вроде все просмотрел все также
Вадим, а зачем Вы мою функцию (в вашем файле) в модуль листа (Svodnaya) запихнули ? Функция должна жить в стандартном модуле ! У Вас два модуля (Module2 и Module3) никем не заселённые - пустые. Аренда помещений дорогая ?