如何用vba在excel中自定义一个函数
要求根据温度,如150,自动判断区间,插值计算出相应的焓值,差不多向forecast()这样的函数,但是要求是在两个温度间按直线插值,而不是整个组线性拟合...
要求根据温度,如150,自动判断区间,插值计算出相应的焓值,差不多向forecast()这样的函数,但是要求是在两个温度间按直线插值,而不是整个组线性拟合
展开
2个回答
展开全部
我是来学习的,因为我不太清楚什么是插值 什么是直线 什么是线性 ,
我猜测直线插值,就是按比例插值(如果这里猜测错了,楼主就不用往下看了,但请指教)
150焓值=(266.36-132.43)/(200-100)*(150-100)+132.43=199.395
自定义公式为:
Function ForecastII(x, known_y, known_x) As Integer
Dim xRange
Dim xMin
Dim xMax
Dim yRange
Dim yMin
Dim yMax
Dim i
xRange = known_x
yRange = known_y
For i = 1 To UBound(xRange)
If xMin <> "" Then
xMax = xRange(i, 1)
yMax = yRange(i, 1)
Exit For
Else
End If
If x > xRange(i, 1) Then
xMin = xRange(i, 1)
yMin = yRange(i, 1)
Else
End If
Next
ForecastII = (yMax - yMin) / (xMax - xMin) * (x - xMin) + yMin
End Function
'(forecasetII 和forecaset的用法一样
'=ForecasetII(150,"焓值表","温度区间表")
我猜测直线插值,就是按比例插值(如果这里猜测错了,楼主就不用往下看了,但请指教)
150焓值=(266.36-132.43)/(200-100)*(150-100)+132.43=199.395
自定义公式为:
Function ForecastII(x, known_y, known_x) As Integer
Dim xRange
Dim xMin
Dim xMax
Dim yRange
Dim yMin
Dim yMax
Dim i
xRange = known_x
yRange = known_y
For i = 1 To UBound(xRange)
If xMin <> "" Then
xMax = xRange(i, 1)
yMax = yRange(i, 1)
Exit For
Else
End If
If x > xRange(i, 1) Then
xMin = xRange(i, 1)
yMin = yRange(i, 1)
Else
End If
Next
ForecastII = (yMax - yMin) / (xMax - xMin) * (x - xMin) + yMin
End Function
'(forecasetII 和forecaset的用法一样
'=ForecasetII(150,"焓值表","温度区间表")
追问
谢谢你的回答,可能我没说清楚,你的理解对的,是线性插值。不过还有点小问题,拿150来说,你的程序好像只是在0-200之间插值,不是100-200,还有恰好等于区间端点值时,我在你的基础上做了修改,(ps:评论写不下,就在追问里写了)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询