从Chart中提取R平方到单元格

时间:2015-09-25 07:34:33

标签: excel excel-vba excel-2010 excel-2013 vba

我有一个Excel散点图,它有一个趋势线和R2值。

如何将趋势线的R平方值返回到变量?

我想:

x = ActiveChart.SeriesCollection(1).Trendlines(1).Datalabel.Value

但这不起作用。

我知道我们可以使用RSQ和LINEST直接计算,但是当截取时,零值表格图表与通过LINEST计算的不同。我想记录图表中的值。

2 个答案:

答案 0 :(得分:3)

你可以尝试:

x = Val (Split(ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text, "=")(1))

如果同时显示公式,则使用第三个元素(id 2)

x = Val (Split(ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text, "=")(2))

要完全确定位置,可以使用:

Public Function GetR2() As Single

    Dim sArray() As String

    sArray = Split(ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text, "=")

    GetR2 = CSng(sArray(UBound(sArray)))

End Function

如果你想坚持一行,那么这也适用于两种情况

x = Val(Split(ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text,“R²=”)(1))

答案 1 :(得分:0)

这有效:

Dim iR2 As Long, iEqual As Long
Dim linearFitLabel As String
Dim strR2 As String
Dim r2 As Double

'Get the trendline label; may contain equation in addition to R²
linearFitLabel = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text

iR2 = InStr(linearFitLabel, "R²") ' find string "R²"
iEqual = InStr(iR2, linearFitLabel, "=") ' find equal sign after that
r2 = CDbl(Trim(Mid(linearFitLabel, iEqual + 1))) ' convert everything after = into a number
MsgBox "R² displayed on chart: " & r2

enter image description here

但请注意,返回的值将取决于图表中显示的R²值的数字格式。所以你不会得到R²的实际值,只是为了显示目的而得到一些精确的值。

其他信息

要真的很干净,我可能想从头开始计算R²。 The formula可以写成Excel公式:

=1-SUMPRODUCT((B3:B10-(A3:A10*INDEX(LINEST(B3:B10,A3:A10,NOT($D$4)),1)+INDEX(LINEST(B3:B10,A3:A10,NOT($D$4)),2)))^2)/SUMPRODUCT((B3:B10-AVERAGE(B3:B10))^2)

无论线性拟合截距是否设置为零(单元格D4),这仍然有效:

enter image description here

与否:

enter image description here

通过一些努力,这个Excel公式可以重写为VBA。