【ExcelVBA・マクロ】近似曲線(トレンドライン)をVBAで追加する方法|Trendlines.Addで種類・予測値を自動設定【コピペOK】

ExcelVBA

Excelのグラフに近似曲線(トレンドライン)を手動で追加している方は多いのではないでしょうか。データの傾向を確認したり、将来の値を予測したりするのに便利な機能ですが、グラフの数が多いと1つずつ設定するのは手間がかかります。

この記事では、VBAのTrendlines.Addメソッドを使って、近似曲線を自動で追加する方法を解説します。近似曲線の種類の指定方法や、将来予測(Forward)の設定方法、既存の近似曲線を削除する方法まで、実務で使えるコード例とあわせて紹介します。

スポンサーリンク
スポンサーリンク

近似曲線(トレンドライン)とは

近似曲線とは、グラフ上のデータのばらつきから全体の傾向を表す線のことです。売上の推移から将来の売上を予測したり、データが右肩上がりか右肩下がりかを視覚的に判断したりする際によく使われます。

Excelでは「線形近似」「指数近似」「多項式近似」など複数の種類が用意されており、VBAからも同じ種類を指定して追加できます。

Trendlines.Addの基本構文

近似曲線は、グラフの系列(Series)が持つTrendlinesコレクションに対してAddメソッドを実行することで追加します。

Set トレンドライン変数 = グラフ.SeriesCollection(系列番号).Trendlines.Add( _
    Type:=近似曲線の種類, _
    Order:=次数, _
    Period:=移動平均の期間, _
    Forward:=将来の予測期間, _
    Backward:=過去の遡り期間, _
    DisplayEquation:=数式を表示するか, _
    DisplayRSquared:=R二乗値を表示するか)

主な引数の説明

  • Type:近似曲線の種類をXlTrendlineTypeの定数で指定します(後述)
  • Order:多項式近似(xlPolynomial)を使う場合の次数(2〜6)
  • Period:移動平均近似(xlMovingAvg)を使う場合の期間
  • Forward:グラフの右側(未来方向)に何区間分延長するか
  • Backward:グラフの左側(過去方向)に何区間分延長するか
  • DisplayEquation:近似式をグラフ上に表示するかどうか(True/False)
  • DisplayRSquared:決定係数(R²)をグラフ上に表示するかどうか(True/False)

実践コード:線形近似曲線を追加する

まずは基本形として、シンプルな線形近似曲線を追加するコードです。あらかじめシート上にグラフ(ChartObject)が1つ作成されている前提で進めます。

Sub AddLinearTrendline()

    Dim ws As Worksheet
    Dim cht As Chart
    Dim tl As Trendline

    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set cht = ws.ChartObjects(1).Chart

    ' 既存の近似曲線があれば先に削除しておく
    Dim i As Long
    For i = cht.SeriesCollection(1).Trendlines.Count To 1 Step -1
        cht.SeriesCollection(1).Trendlines(i).Delete
    Next i

    ' 線形近似曲線を追加し、数式とR二乗値を表示する
    Set tl = cht.SeriesCollection(1).Trendlines.Add(Type:=xlLinear)
    tl.DisplayEquation = True
    tl.DisplayRSquared = True

End Sub

既存の近似曲線が残っていると重複して追加されてしまうため、削除処理をあらかじめ入れておくと安全です。

実践コード:将来の予測期間を指定する

売上推移のグラフなどでは、近似曲線を使って「この先数か月分」を予測したいケースがよくあります。Forward引数に予測したい区間数を指定すると、グラフ上で近似曲線が未来方向に延長されます。

Sub AddTrendlineWithForecast()

    Dim cht As Chart
    Dim tl As Trendline

    Set cht = ThisWorkbook.Worksheets("Sheet1").ChartObjects(1).Chart

    Set tl = cht.SeriesCollection(1).Trendlines.Add( _
        Type:=xlLinear, _
        Forward:=3, _
        Backward:=0, _
        DisplayEquation:=True, _
        DisplayRSquared:=True)

    tl.Name = "売上予測線"

End Sub

このコードでは、既存のデータ範囲から3区間分(例:3か月分)だけ未来方向に近似曲線を延長しています。tl.Nameで名前を付けておくと、凡例上でも識別しやすくなります。

なお、Trendlineオブジェクト自体からは具体的な予測値(数値)を直接取得できません。予測値をセルに数値として表示したい場合は、WorksheetFunction.Forecast.LinearやWorksheetFunction.Trendをあわせて使うのがおすすめです。

Sub ShowForecastValue()

    Dim ws As Worksheet
    Dim knownY As Range
    Dim knownX As Range
    Dim nextX As Double
    Dim forecastValue As Double

    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set knownY = ws.Range("B2:B13")   ' 実績値(売上など)
    Set knownX = ws.Range("A2:A13")   ' 期間(月など)

    nextX = ws.Range("A13").Value + 1

    forecastValue = WorksheetFunction.Forecast_Linear(nextX, knownY, knownX)

    ws.Range("B14").Value = forecastValue

End Sub

グラフには近似曲線で「傾向」を見せつつ、セルにはForecast.Linearで具体的な予測値を表示する、という組み合わせが実務では扱いやすいです。

近似曲線の種類(XlTrendlineType)

Type引数に指定できる主な定数は以下のとおりです。データの性質に合わせて使い分けましょう。

定数 内容 主な用途
xlLinear 線形近似 一定のペースで増減しているデータ
xlExponential 指数近似 増減の割合が加速していくデータ
xlLogarithmic 対数近似 急激に変化した後に緩やかになるデータ
xlPower 累乗近似 一定の割合で増加し続けるデータ
xlPolynomial 多項式近似 増減を繰り返すデータ(Order引数で次数指定)
xlMovingAvg 移動平均近似 データのばらつきを平滑化したい場合(Period引数で期間指定)

多項式近似・移動平均近似を使う場合は、次のようにOrderまたはPeriodを追加で指定します。

' 多項式近似(次数3)
Set tl = cht.SeriesCollection(1).Trendlines.Add(Type:=xlPolynomial, Order:=3)

' 移動平均近似(期間4)
Set tl = cht.SeriesCollection(1).Trendlines.Add(Type:=xlMovingAvg, Period:=4)

既存の近似曲線を削除する方法

近似曲線を作り直す場合や、不要になった場合はDeleteメソッドで削除します。複数の近似曲線が存在する可能性があるため、後ろから順にループして削除するのが安全です。

Sub DeleteAllTrendlines()

    Dim cht As Chart
    Dim srs As Series
    Dim i As Long

    Set cht = ThisWorkbook.Worksheets("Sheet1").ChartObjects(1).Chart

    For Each srs In cht.SeriesCollection
        For i = srs.Trendlines.Count To 1 Step -1
            srs.Trendlines(i).Delete
        Next i
    Next srs

End Sub

すべての系列の近似曲線をまとめて削除したい場合は、上記のようにSeriesCollection全体をループさせると漏れがありません。

まとめ

今回は、VBAのTrendlines.Addメソッドを使って近似曲線を自動追加する方法を紹介しました。

  • Trendlines.AddのType引数で近似曲線の種類を指定できる
  • Forward引数で未来方向への予測期間を延長できる
  • 具体的な予測値をセルに表示したい場合はWorksheetFunction.Forecast.Linearなどと組み合わせる
  • 多項式近似・移動平均近似ではOrder・Period引数の追加指定が必要
  • 作り直す前に既存の近似曲線を削除しておくと重複を防げる

グラフを大量に作成・更新するようなマクロを組んでいる方は、ぜひ近似曲線の自動追加も組み込んでみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました