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

问题描述 投票:0回答:2

我正在尝试将日志趋势线从图表复制并粘贴到单元格中。样本方程如下: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

excel vba
2个回答
0
投票

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

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

更新 -

1)使用Worksheet_Change事件:

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

2)您可以将宏的执行与控件绑定。

例如。窗体控件中的命令按钮最简单。功能区>开发人员选项卡>控件> 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.然后将原始Y值乘以此值,以便您有一个LINEST可以绘制的新的完全填充的Y系列。

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

Chart and formulas

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


0
投票

使用Text对象的DataLabel属性

Range("C35").Value = ActiveChart.FullSeriesCollection(1).Trendlines(1).DataLabel.Text
© www.soinside.com 2019 - 2024. All rights reserved.