Excel vba linest函数引用的(range / value) ^(1:3)扩张的矩阵区域形式怎么写 10
linest是Excel的最小二乘插值函数,形如y=mx+b或者y=m1x1+m2x2+...+b(如果有多个区域的x值)对于一元多次幂级数y=anx^n+a(n-1)x...
linest是Excel的最小二乘插值函数,
形如
y = mx + b 或者
y = m1x1 + m2x2 + ... +b(如果有多个区域的 x 值)
对于一元多次幂级数y=anx^n+a(n-1)x^(n-1)+a1x+a0
linest函数返回各系数an,an-1,...,a1,a0
假如x,y是列排的区域,幂次为单元格$B$34存放的值,即indirect($B$34)
系数列排区域就是linest(y,x^COLUMN(INDIRECT("$A:"&SUBSTITUTE(ADDRESS(1,COLUMN($A1)+$B$34-1,4),1,))),TRUE,FALSE)
这些系数已经在Excel表中实现了,可以成功插值
问题就是在VBA中系数取值不成功,函数返回#Value!
VBA的LinEst函数定义为
LinEst(y_group / y_max, (x_group / x_max) ^ Application.WorksheetFunction.Column(Application.WorksheetFunction.INDIRECT("$A:" &
& Application.WorksheetFunction.Substitute(Application.WorksheetFunction.Address(1,
Application.WorksheetFunction.Column(A1) +$B$34 - 1, 4), 1, 1))), True, False))
有没有高人指点问题出在哪里呢,本人觉得微软对VBA的LinEst函数应该能重用Excel表格的linest函数
只是语法要怎么写还不得而知
为了防止计算溢出,x和y数值组都采用了归一化处理,即取与最大值的比值y_group / y_max,
x_group / x_max 展开
形如
y = mx + b 或者
y = m1x1 + m2x2 + ... +b(如果有多个区域的 x 值)
对于一元多次幂级数y=anx^n+a(n-1)x^(n-1)+a1x+a0
linest函数返回各系数an,an-1,...,a1,a0
假如x,y是列排的区域,幂次为单元格$B$34存放的值,即indirect($B$34)
系数列排区域就是linest(y,x^COLUMN(INDIRECT("$A:"&SUBSTITUTE(ADDRESS(1,COLUMN($A1)+$B$34-1,4),1,))),TRUE,FALSE)
这些系数已经在Excel表中实现了,可以成功插值
问题就是在VBA中系数取值不成功,函数返回#Value!
VBA的LinEst函数定义为
LinEst(y_group / y_max, (x_group / x_max) ^ Application.WorksheetFunction.Column(Application.WorksheetFunction.INDIRECT("$A:" &
& Application.WorksheetFunction.Substitute(Application.WorksheetFunction.Address(1,
Application.WorksheetFunction.Column(A1) +$B$34 - 1, 4), 1, 1))), True, False))
有没有高人指点问题出在哪里呢,本人觉得微软对VBA的LinEst函数应该能重用Excel表格的linest函数
只是语法要怎么写还不得而知
为了防止计算溢出,x和y数值组都采用了归一化处理,即取与最大值的比值y_group / y_max,
x_group / x_max 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏10(财富值+成长值)
1个回答
展开全部
你写的公式挺复杂,LinEst函数我刚看了看,还不太理解函数的全部作用。自己简单试了试,VBA中使用有些注意事项:LinEst返回值是数组,需要用数组变量接收公式返回值:
Dim a() As Variant
Cells(7, 5).Formula = "= INDEX(LINEST(B2:B11,A2:A11),2)"
a = Application.WorksheetFunction.LinEst(Range("B2:B11"), Range("A2:A11"))
Cells(9, 5).Value = a(2)
上面代码中a(2),就是= INDEX(LINEST函数(……),2)的值,说明计算成功了。
你问题中LinEst前面没有 使用Application.WorksheetFunction.限定,还有你怎么处理计算结果?是不是这些地方出错了?
希望能给你一些启发。
追答
Application.WorksheetFunction 下面没有Column方法或属性!
可以使用Range("A1").Column,获取列号,但我不知道你是不是要获取列号。
另外,提问中 Application.WorksheetFunction.Address 也不对,问题同上,可以改为Range(???).Address 或Cells(?,?).Address
Application.WorksheetFunction.Indirect 也不对!!,难道看不到 写了. (点)之后 没有这一项么?!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询