复制趋势线方程无法正常工作

Copying trendine equation not working properly

我想遍历按行排列的四组数据。我想从每个数据集制作图表并应用趋势线,让 excel 显示趋势线方程并复制趋势线方程的 "m" 部分 (y=mx+b)在行尾后的单元格中。我在处理第一个数据集的整个过程时记录了一个宏,并对其进行了一些修改以引入循环。我的问题是,尽管代码使用趋势线和方程式创建了四个图表,但它在所有四行之后复制了第一个图表的 "m" 值。我试图解决这个问题,但失败了。现在 - 以相同的形式,所以我猜这是原始问题 - 此代码在每个数据集之后打印从代码复制到 clipboarb 的任何内容的第一行,在所有四个数据集之后,以及复制的剩余部分它下面的部分(只有一次)。 它可能看起来没有意义,所以最好按以下方式尝试此代码:用数字和 运行 填充范围 C3:K6 代码。之后,将代码复制到剪贴板并再次 运行 代码。 所以,我的两个问题是:1. 如何让代码在它们之后复制每个数据集的 "m" 值,以及 2. 为什么它现在表现得如此疯狂?

Sub Lasttest()

Dim i As Integer

For i = 3 To 6
  Range("C" & i).Select
  ActiveCell.Range("A1:I1").Select
  ActiveSheet.Shapes.AddChart.Select
  ActiveChart.ChartType = xlXYScatter
  ActiveChart.SetSourceData Source:=ActiveCell.Range("Sheet1!A1:I1")
  ActiveChart.SeriesCollection(1).Select
  ActiveChart.SeriesCollection(1).Trendlines.Add
  ActiveChart.SeriesCollection(1).Trendlines(1).Select
  Selection.DisplayEquation = True
  ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Select
  ActiveCell.Offset(0, 10).Range("A1").Select
  ActiveSheet.Paste
Next

End Sub

费伦茨

做了一些代码清理,这对我有用:

    Sub InsertChartsAndPrintEquations()

    Dim i As Integer
    Dim rng As Range

    For i = 3 To 6
      Set rng = Range("C" & i & ":K" & i)

      ' insert chart
      ActiveSheet.Shapes.AddChart.Select
      With ActiveChart
        .ChartType = xlXYScatter
        .SetSourceData Source:=rng
        With .SeriesCollection(1)
            .Trendlines.Add
            .Trendlines(1).DisplayRSquared = False
            .Trendlines(1).DisplayEquation = True
        End With

        ' grab & insert equation
        With ActiveSheet.ChartObjects(i - 2)
            .Activate
            Range("M" & i) = .Chart.SeriesCollection(1).Trendlines(1).DataLabel.Text
        End With
      End With
    Next

End Sub

显然,在定义源数据时必须使用范围对象,并且必须先激活图表才能从中获取方程式。

编辑#1

这段代码应该更健壮:

Sub InsertChartsAndPrintEquations2()

    Dim i As Integer
    Dim rng As Range
    Dim cht As ChartObject

    ' add charts
    For i = 3 To 10
      Set rng = Range("C" & i & ":K" & i)
      ActiveSheet.Shapes.AddChart.Select

      With ActiveChart
        .ChartType = xlXYScatter
        .SetSourceData Source:=rng
        With .SeriesCollection(1)
            .Trendlines.Add
            .Trendlines(1).DisplayRSquared = False
            .Trendlines(1).DisplayEquation = True
        End With
      End With
    Next

    ' grab & insert equations
    i = 3 ' set to same starting value as in the for next loop above
    For Each cht In ActiveSheet.ChartObjects
        cht.Activate
        Range("M" & i) = cht.Chart.SeriesCollection(1).Trendlines(1).DataLabel.Text
        i = i + 1
    Next cht

End Sub