【エクセルVBA】データから対数関数近似式&式内係数を取得する方法!

こんにちは、ヒガシです。

 

このページでは以下の画像のように、指定したデータから対数関数近似式を取得する方法をご紹介していきます。

データから対数近似式および係数を一発算出するという概要図

 

手作業でやろうとすると、

①データから散布図グラフを作成

②近似曲線の追加

③対数近似を選択

④グラフに数式を表示

といった面倒な作業を実施する必要がありますが、このページで紹介するVBAコードを実行すれば上記の作業を一発で実施し、数式をセルに記述することが可能です。

 

また、単純に式を取り出すだけでなく、式内の2つの係数もそれぞれ取得していきます。

 

それではさっそくやっていきましょう!

 

※似たような作業ですが、指数関数近似式を導出する方法は以下でご紹介しています。興味があればあわせてこちらもご覧ください。

【エクセルVBA】データから指数関数近似式と式内係数を導出する方法!

 

スポンサーリンク

対数近似式を取得する流れ

実際の作業に入る前にまずはどのような作業で式を取り出すかを解説しておきます。

 

①データが存在する領域を指定する

②①の領域を参照した散布図を作成する

③②のグラフに対数近似式を追加する

④③で作った数式を文字列として取り出す

⇒これで数式全体としては取得完了

⑤④の文字列を分解して各係数を取り出す

 

まさに冒頭で紹介した手作業で実施している内容そのものですね。

 

今回紹介する手法では、①の領域指定さえしてしまえば残りの作業は全部自動でやってくれるようになっています。

 

スポンサーリンク

対数近似式を取得するサンプルコード

それでは先ほど紹介した内容を実施してくれるサンプルコードをご紹介していきます。

Sub logarithmic_formula()
    '変数の型を宣言
    Dim x_ax As String, y_ax As String
    Dim grf_formula As String
    Dim a As Single, b As Single
    'データ範囲を指定する(あなたがやるのはここだけ)
    x_ax = "A2:A11"
    y_ax = "B2:B11"
    'グラフ(散布図)を挿入する
    ActiveSheet.Shapes.AddChart2(-1, -4169).Select
    With ActiveChart
        '指定したデータでグラフ作成
        .Parent.Name = "sample_grf"
        .SeriesCollection.NewSeries
        With .FullSeriesCollection(1)
            .XValues = ActiveSheet.Name & "!" & x_ax
            .Values = ActiveSheet.Name & "!" & y_ax
        End With
    End With
    'グラフに近似曲線を追加する
    With ActiveChart.SeriesCollection(1)
        .Trendlines.Add
        .Trendlines(1).Select
    End With
    '近似曲線の種類を指定する
    With Selection
        .Type = xlLogarithmic
    End With
    Selection.DisplayEquation = True
    '近似曲線の式の桁数を指定する
    ActiveSheet.ChartObjects("sample_grf").Activate
    With ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel
        .NumberFormat = "#,##0.000000_ "
    End With
    'グラフの近似式をリフレッシュ
    ActiveSheet.ChartObjects("sample_grf").Activate
    ActiveChart.Refresh
    'グラフの近似式を取得する
    With ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel
        grf_formula = .Text
    End With
    ActiveSheet.ChartObjects("sample_grf").Delete
    split_formula = Split(grf_formula, " ")
    a = split_formula(2)
    b = split_formula(4) & split_formula(5)
    '数式&係数をセルに書き出す
    Cells(1, 4) = grf_formula
    Cells(2, 4) = "a="
    Cells(2, 5) = a
    Cells(3, 4) = "b="
    Cells(3, 5) = b
End Sub

 

あなたが指定するべきところは7,8行目のグラフ作成の際のX, Yの領域だけです。

あとは全自動で多項近似式がセル上に出力されます。

※出力する場所はあなたの状況にあわせて適宜変更してください。

 

スポンサーリンク

サンプルコードの実行結果確認

それでは先ほどのコードを実行してみましょう。

 

実行する前はこのような状態です。

ただデータが存在しているだけですね。

サンプルコード実行前のシート状態

 

それでは実行してみます。

サンプルコード実行後のシート状態

問題なく結果が出力されていますね。

 

念のためグラフに近似式を追加して確認してみましょう。

サンプルコードの結果とグラフ上に近似式を表示した結果の比較

完璧に数値が一致していますね!

 

スポンサーリンク

おわりに

というわけで今回は、エクセルVBAをつかって対数近似式の式、係数を一発算出する方法をご紹介しました。

データ分析の際にぜひご活用ください。

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。

⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

それではまた!

コメント

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