こんにちは、ヒガシです。
このページでは以下の画像のように、指定したデータから指数関数近似式を取得する方法をご紹介していきます。
手作業でやろうとすると、
①データから散布図グラフを作成
②近似曲線の追加
③指数近似を選択
④グラフに数式を表示
といった面倒な作業を実施する必要がありますが、このページで紹介するVBAコードを実行すれば上記の作業を一発で実施し、数式をセルに記述することが可能です。
また、単純に式を取り出すだけでなく、式内の2つの係数もそれぞれ取得していきます。
それではさっそくやっていきましょう!
※似たような作業ですが、対数近似式を導出する方法は以下でご紹介しています。興味があればあわせてご覧ください。
【エクセルVBA】データから対数関数近似式&式の係数を取得する方法!
指数近似式を取得する流れ
実際の作業に入る前にまずはどのような作業で式を取り出すかを解説しておきます。
①データが存在する領域を指定する
②①の領域を参照した散布図を作成する
③②のグラフに指数近似式を追加する
④③で作った数式を文字列として取り出す
⇒これで数式全体としては取得完了
⑤④の文字列を分解して各係数を取り出す
まさに冒頭で紹介した手作業で実施している内容そのものですね。
今回紹介する手法では、①の領域指定さえしてしまえば残りの作業は全部自動でやってくれるようになっています。
指数近似式を取得するサンプルコード
それでは先ほど紹介した内容を実施してくれるサンプルコードをご紹介していきます。
Sub exp_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 = xlExponential
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 = Right(split_formula(3), Len(split_formula(3)) - 1)
'数式&係数をセルに書き出す
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をつかって指数近似式の式、係数を一発算出する方法をご紹介しました。
データ分析の際にぜひご活用ください。
このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント