- 締切済み
VBAで回帰直線の傾きを求める方法!
こんにちは. 研究で行き詰ってしまったので緊急で質問させてください. 添付画像1のように数字の並んだエクセルデータ(行512列166)があります. 添付画像は例ですが,赤でかこっているように,指定した4:2のデータから回帰直線の傾きをそれぞれの赤い四角のグループで求めていきたいです. その傾きの値が(1),(2),,として, (1)(7)(13) (2)(8)(14) (3)(9)(15) (4)(10), (5)(11), (6)(12) のように別のシートに並べていきたいと考えています.(実際は行128列83になるかと思います.) すこし複雑で自力では解決できませんでした. もし不明な点があればコメントいただければと思います. よろしくお願いいたします.
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- neKo_deux
- ベストアンサー率44% (5541/12319)
SLOPE関数って使った事無いけど、ヘルプの説明どおりなら、 =SLOPE(yの範囲, xの範囲) で、 yの範囲は=OFFSET(【元データの$A$1セル】, 【ROW()関数使って0, 4, 8, 12, …行目】, 【COLUMN()関数使って0, 2, 4, 8, …列目】, 【高さ4】, 【幅1】) xの範囲は=OFFSET(【元データの$A$1セル】, 【ROW()関数使って0, 4, 8, 12, …行目】, 【COLUMN()関数使って1, 3, 5, 7, …列目】, 【高さ4】, 【幅1】) って指定できる気がしますが、なんか上手くいかなかったです。 -- VBA使う必要あるのかな?って言った手前、ナンですが… 仕方ないので、VBAで指定したセルを基準に2×4の範囲をxの範囲、yの範囲として傾き計算する関数作ると、 Function Slope4(rng As Range) Dim n, x, y, Sx, Sy, Sxy, Sx2 Sx = 0 ' Σx Sy = 0 ' Σy Sxy = 0 ' Σxy Sx2 = 0 ' Σx^2 For n = 0 To 3 x = rng.Offset(n, 0) y = rng.Offset(n, 1) Sx = Sx + x Sy = Sy + y Sxy = Sxy + x * y Sx2 = Sx2 + x ^ 2 Next n Slope4 = (4 * Sxy - Sx * Sy) / (4 * Sx2 - Sx * Sx) End Function Sheet2の、 A1:=Slope4(OFFSET(Sheet1!$A$1,(ROW()-1)*4,(COLUMN()-1)*2)) として、以降の範囲にコピペ。 すると、ざっくり確認する限りは計算できてるっぽいです。
- neKo_deux
- ベストアンサー率44% (5541/12319)
> すこし複雑で自力では解決できませんでした. 数が多くて複雑って事なら、まずは質問のサンプルみたいに数を減らして計算してみては。 VBAを使う必要もあるんでしょうか。 傾きって言ったって、4つの座標の組で傾きを計算するのか、等間隔な8点の傾きを計算するのかも不明瞭です。 例えば、質問の(1)の傾きは手計算でもいいですが、どういう計算でいくつになりますか?
補足
こんにちは,コメントありがとうございます. VBA使わずにすむならそれにこしたことはないです. 質問の例の傾きは,関数=SLOPE(RC[-1]:R[3]C[-1],RC[-2]:R[3]C[-2])で1となりました. slope関数で既知のyはB1からB4,既知のxはA1からA4としました.