Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1086 / 13644 ツリー ←次へ | 前へ→

【76373】エラー値がある場合にもグラフの「近似曲線」と同様の動作をする関数 htnk 14/11/9(日) 23:27 質問[未読]
【76374】Re:エラー値がある場合にもグラフの「近似... γ 14/11/9(日) 23:57 発言[未読]
【76379】Re:エラー値がある場合にもグラフの「近似... htnk 14/11/10(月) 21:45 発言[未読]
【76380】Re:エラー値がある場合にもグラフの「近似... γ 14/11/10(月) 22:17 発言[未読]
【76391】Re:エラー値がある場合にもグラフの「近似... htnk 14/11/15(土) 15:49 お礼[未読]
【76392】Re:エラー値がある場合にもグラフの「近似... γ 14/11/15(土) 19:43 発言[未読]

【76373】エラー値がある場合にもグラフの「近似曲...
質問  htnk  - 14/11/9(日) 23:27 -

引用なし
パスワード
   エラー値がある場合にもグラフの「近似曲線」と同様の動作をする関数、
または関数でなくても係数を得る方法はありませんでしょうか。

グラフの「近似曲線」機能を使用して表示される近似式の係数を、セルで扱いたいと思っています。
色々な方法を試しましたが、エラー値がある場合にも「近似曲線」機能と同じ動作をしてもらえる
方法を見付けることが出来ませんでした。

近似式の関数としては、y=ax+b をはじめ多項式、y=ax^b、y=ae^x 等を想定しています。
ジャンルは統計というよりは、科学技術実験系です。

ここに、調べた方法とエラー値がある場合の結果をまとめました。
なんとか最強の方法に辿り着きたいと思いますのでお助け下さい。

方法     | 空欄or文字列 | #N/A  | #NUM!  | #DIV/0! | #VALUE! | 備考
--------------------------------------------------------------------------------
「近似曲線」 | ok      | ok   | 0扱い  | 0扱い  | 0扱い  | 最強
slope()   | ok      | #N/A  | #NUM!  | #DIV/0! | #VALUE! | 多項式非対応
intercept() | ok      | #N/A  | #NUM!  | #DIV/0! | #VALUE! | 同上
rsq()    | ok      | #N/A  | #NUM!  | #DIV/0! | #VALUE! | 同上
forecast()  | ok      | #N/A  | #NUM!  | #DIV/0! | #VALUE! | 同上
linest()   | #VALUE!    | #VALUE! | #VALUE! | #VALUE! | #VALUE! | 最弱
trend()   | #VALUE!    | #VALUE! | #VALUE! | #VALUE! | #VALUE! | 同上

現在のところ、妥協を重ねて以下のようなことをしています。
【y=ax+b の場合】
  a = slope( y , x ) b = intercept( y , x )
【y=ax^b の場合】
  a = exp(intercept( ln(y)を計算したセル , ln(x)を計算したセル )
  b = slope( ln(y)を計算したセル , ln(x)を計算したセル )
  ※ ln(y) を計算したセルとは、 =if(isna(y), "", ln(y)) を計算したセル。
  ※ 一気に a = exp(intercept( ln(y) , ln(x) ) と書くと、
    ln(空欄)がエラーになるため intercept() もエラーになってしまう。
【多項式の場合】
  諦めて linest を使い、空欄がある場合は時間をかけて手作業で対応する。

【76374】Re:エラー値がある場合にもグラフの「近...
発言  γ  - 14/11/9(日) 23:57 -

引用なし
パスワード
   あなたが望むような回答でなくて失礼します。

>なんとか最強の方法に辿り着きたい
何をもって最強とおっしゃっているのか、具体的に明確にして下さい。
空白やエラー値などの値があったとき、
どのようにしたいのかも明確にして下さい。

【76379】Re:エラー値がある場合にもグラフの「近...
発言  htnk  - 14/11/10(月) 21:45 -

引用なし
パスワード
   不明瞭な投稿にて失礼いたしました。

ここでは、グラフの「近似曲線」のように、空欄や #N/A があっても
答えを示せる (エラー値を返さない) ことを「最強」と定義させてください。

# グラフを描き、近似曲線を引いて計算される内部データのポインタに
# ワークシート関数でアクセスする方法があれば良いのですが...

【76380】Re:エラー値がある場合にもグラフの「近...
発言  γ  - 14/11/10(月) 22:17 -

引用なし
パスワード
   ># グラフを描き、近似曲線を引いて計算される内部データのポインタに
># ワークシート関数でアクセスする方法があれば良いのですが...
昔(たぶんExcel2003くらいまで?)は、
ht tp://www2.aqua-r.tepm.jp/~kmado/ke_m6.htm#E97M054
のような方法で、近似式の係数を取得することができたのですが、
手元の2010ではエラーになりますね。
残念です。(念のため、そちらでも確認して下さい)

今の方針でいいんじゃないですかね。
多項式の場合は、x^n の項をそれぞれ独立の変数と思えば、
線形近似の手法が使えるはずです。

【76391】Re:エラー値がある場合にもグラフの「近...
お礼  htnk  - 14/11/15(土) 15:49 -

引用なし
パスワード
   教えていただいたページにあるコードすべての動作確認はしておりませんが、
ActiveSheet.ChartObjects("グラフ 1").Chart
.SeriesCollection(1).Trendlines(1).DataLabel.Text
の値取得は Excel2010 でできましたので、
「VBA を使えば近似曲線の係数を得ることが可能」と言えそうですね。

VBA が使える場合はスムーズに作れそうです。ありがとうございました。

# なぜ ReadOnly でも良いからセル関数から取得できないのか...

【76392】Re:エラー値がある場合にもグラフの「近...
発言  γ  - 14/11/15(土) 19:43 -

引用なし
パスワード
   ▼htnk さん:
>教えていただいたページにあるコードすべての動作確認はしておりませんが、
>ActiveSheet.ChartObjects("グラフ 1").Chart
>.SeriesCollection(1).Trendlines(1).DataLabel.Text
>の値取得は Excel2010 でできましたので、
>「VBA を使えば近似曲線の係数を得ることが可能」と言えそうですね。

おお、それは朗報です。
私の手元でも同じコードを実行し、エラーになったのでその旨書いたのですが、
こちら側の問題ですね。
関連urlを書いて置いてよかった。

># なぜ ReadOnly でも良いからセル関数から取得できないのか...
必要度に関するMSの判断ということなんでしょうか。

1086 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free