dポイントプレゼントキャンペーン実施中!

こんにちは.
研究で行き詰ってしまったので緊急で質問させてください.
添付画像1のように数字の並んだエクセルデータ(行512列166)があります.
添付画像は例ですが,赤でかこっているように,指定した4:2のデータから回帰直線の傾きをそれぞれの赤い四角のグループで求めていきたいです.
その傾きの値が(1),(2),,として,

(1)(7)(13)
(2)(8)(14)
(3)(9)(15)
(4)(10),
(5)(11),
(6)(12)

のように別のシートに並べていきたいと考えています.(実際は行128列83になるかと思います.)


すこし複雑で自力では解決できませんでした.
もし不明な点があればコメントいただければと思います.
よろしくお願いいたします.

「VBAで回帰直線の傾きを求める方法!」の質問画像

A 回答 (2件)

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))
として、以降の範囲にコピペ。

すると、ざっくり確認する限りは計算できてるっぽいです。
    • good
    • 0

> すこし複雑で自力では解決できませんでした.



数が多くて複雑って事なら、まずは質問のサンプルみたいに数を減らして計算してみては。
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としました.

補足日時:2014/11/22 11:41
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!