将对数趋势线方程从图表复制并粘贴到单元格

时间:2018-03-03 05:21:16

标签: excel vba

我尝试将日志趋势线从图表复制并粘贴到单元格中。样本方程如下:y = 0.0083ln(x)-0.0902。当我为不同的数据点运行回归时,方程式不断变化。因此,我希望将宏复制并粘贴到单元格中。当等式改变时,以下代码不起作用(即,它第一次发生,但之后,我得到一个错误)。代码如下:

ActiveChart.FullSeriesCollection(1).Trendlines(1).DataLabel.Select
Selection.Copy
Range("C35").Select
ActiveSheet.Paste

Excel显示错误在" ActiveSheet.Paste"。我真的很感激如何解决这个问题的一些指导。

谢谢! QHARR - reference picture

2 个答案:

答案 0 :(得分:0)

您可以使用.DataLabel.Formula.DataLabel.Text使用VBA写出公式。我还提供了一个完整性的表单方法。

以下优点是向您展示如何开始检查您想要的趋势类型,并在必要时作为扩展循环到其他系列的基础。

更新 -

1)使用Worksheet_Change事件:

您可以将此绑定到目标为Y范围的Worksheet_Change事件,但将其设置为每次更新时触发一次

2)你可以将宏的执行与控件联系起来。

E.g。窗体控件中的命令按钮最简单。功能区>开发者标签>控件> form controls。通常,比ActiveX对象问题少。然后将该命令按钮与宏GetTrendlineEquation相关联(右键单击按钮,关联应该这样做)。然后按下按钮将执行宏。

如果你真的想确定你得到正确的等式,或者得到多个,你可以迭代图表,图表系列和趋势线。

在主代码之后我包含了一个检查目标系列趋势类型是对数的例子。

代码版本,将公式写出到工作表1的A列中的下一个可用行。

Public Sub GetTrendLineEquation()

    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet1") ' change as appropriate

    Dim targetChart As Chart

    Set targetChart = ws.ChartObjects("Chart 1").Chart ' change as required

    Dim targetTrend As Trendline

    Set targetTrend = targetChart.SeriesCollection(1).Trendlines(1) ' change as appropriate

    Dim lastRow As Long
    Dim nextRow As Long

    lastRow = ws.Cells(ws.Rows.Count,"A").End(xlUP).Row

    If lastRow = 1 Then 
        nextRow = 1 
    Else 
       nextRow = lastRow + 1
    End If

    ws.Range("A"& nextRow) = targetTrend.DataLabel.Formula

End Sub

检查趋势类型:

For Each targetTrend In myChart.SeriesCollection(1).TrendLines

    If targetTrend.Type = -4133 Then Msgbox "Log"

    ' If Left$(targetTrend.Name,3) = "Log" Then Msgbox "Log"

Next targetTrend  

趋势类型的枚举可以找到here,也可以通过对象浏览器通过类XLTrendlineType的成员找到。

循环多个系列得到趋势公式:

Dim currentSeries As Long

For currentSeries = 1 To myChartSeriesCollection.Count

    For Each targetTrend In myChart.SeriesCollection(1).TrendLines

        If targetTrend.Type = -4133 Then Debug.Print targetTrend.DataLabel.Text

    Next targetTrend  

Next currentSeries

表格中的公式:

在看到Missing values in MS Excel LINEST, TREND, LOGEST and GROWTH functions

之前,我已经使用了帮助列

我在辅助列中使用的公式是:

=IF(OR(ISNA(D10),ISBLANK(D10)),0,1)

这会查看你的Y值,如果是#N / A则返回0,否则返回其他1.然后你将原来的Y值乘以这个,这样就可以得到LINEST可以绘制的新的完全填充的Y系列。

使用@satesh中的模板,我获得了斜率和截距计算,并将整个事物插入到一个连接的字符串中,该字符串显示了单元格中的公式,如下所示:

Chart and formulas

相当简单但可以将相同的原则应用于您的数据吗?

答案 1 :(得分:0)

使用Text对象

DataLabel属性
Range("C35").Value = ActiveChart.FullSeriesCollection(1).Trendlines(1).DataLabel.Text
相关问题