从Chart中提取R-square到单元格中

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

如何将趋势线的R平方值返回给variables?

我想:

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

但是这不起作用。

我知道我们可以直接使用RSQ和LINEST来计算,但是当截取到的零值表格与通过LINEST计算的不一样。 我想logging图表中的值。

你可以试试:

 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))

这工作:

 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 

在这里输入图像说明

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


附加信息

要真正干净,我可能要从头计算R²。 公式可以写成一个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),该值仍然有效:

在这里输入图像说明

或不:

在这里输入图像说明

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