【问题标题】:Extracting R-square from Chart into cell从图表中提取 R 方到单元格中
【发布时间】:2015-09-25 07:34:33
【问题描述】:

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

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

我想:

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

但这不起作用。

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

【问题讨论】:

  • 是什么样的趋势线?
  • 仅线性趋势线

标签: excel excel-2010 excel-2013 vba


【解决方案1】:

你可以试试:

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

【讨论】:

  • 这是一个非常不错的尝试,但需要指出的是这个fails when the linear fit equation is displayed alongside the R² in the chart
  • 我想我明白你的意思了。如果公式也显示,则使用拆分后的第三个元素项,如下所示:x = Val (Split(ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text, "=")(2))
  • 我已将其添加到我的答案中。感谢补充
【解决方案2】:

这行得通:

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²。 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),这仍然有效:

或不:

只要稍加努力,这个 Excel 公式就可以重写为 VBA。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-19
    • 2011-08-28
    • 1970-01-01
    • 2015-06-26
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多