- 締切済み
ExcelVBAでの標準偏差の求め方
ExcelVBAでの標準偏差の求め方 使用ソフト:Excel2003 ExcelVBAで標準偏差を求めたいのですが、 求めたいデータが複数ファイル(最大31ファイル)に渡り、 また全ての行を一つのファイルにまとめようとすると9万行以上になります。 一ファイルあたりは3000行前後です。 一つのファイルに全てのデータがあれば 下記のようにStDev関数を使うのですが、 今回は複数ファイルに渡るので使えません。 Application.WorksheetFunction.StDev(.Range(.Cells(1, 1), .Cells(Y, 1))) また、1つのファイルにまとめるにもExcel2003なので、 65536行までしか行がなくまとめられません。 このような場合、どのように標準偏差を求めればいいのでしょうか? 出来るだけ速度は犠牲にしたくはありませんが、 速度以前に実装すら出来ません…。 どうか先達の皆様、お知恵をお貸しください。 (同じデータに対して平均、最大値も求めていますが、 それは元ファイルから一つ一つのデータファイルを開いて、 WorksheetFunctionのSum関数、Max関数を使用して最後に集計、計算をしています)
- willamet
- お礼率0% (0/2)
- オフィス系ソフト
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
コードが読めるようでしたら、このようにすれば出来るはずです。 たぶん、数式そのものでも、それぞれの範囲を、引数にすれば取れるはずです。ただ、マクロなら、このようにして、関数を利用しなくても出来るというだけです。 'サンプル '標準モジュール Private Ar() As Variant '先頭に置く Sub GetStndDevP() Dim i As Long, cnt As Long Dim rng As Range Dim buf As Variant Dim dMax As Double Dim dTotal As Double Dim dDevTotal As Double Dim dAver As Double Dim ret As Double Erase Ar dMax = -10 ^ 10 With Worksheets("Sheet1") Set rng = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)) End With Call MakingArray(rng) With Worksheets("Sheet2") Set rng = .Range("B1", .Cells(Rows.Count, 2).End(xlUp)) End With Call MakingArray(rng) '標準偏差の計算 For i = LBound(Ar) To UBound(Ar) dTotal = dTotal + Ar(i) If Ar(i) > dMax Then dMax = Ar(i) End If Next i cnt = i dAver = dTotal / cnt For i = LBound(Ar) To UBound(Ar) dDevTotal = dDevTotal + ((Ar(i) - dAver)) ^ 2 Next i ret = (dDevTotal / cnt) ^ (1 / 2) 'メッセージボックス MsgBox "合計: " & dTotal & vbCrLf & _ "最大値: " & dMax & vbCrLf & _ "標準偏差: " & ret End Sub Sub MakingArray(rng As Range) Dim n As Long, m As Long Dim i As Long, j As Long m = rng.Rows.Count On Error Resume Next n = UBound(Ar) + 1 On Error GoTo 0 ReDim Preserve Ar(m + n - 1) For i = 1 To m Ar(n + i - 1) = rng.Cells(i, 1).Value Next End Sub
一つのワークシートの9万個のセルそれぞれに外部ファイルのワークシートの値を参照、あるいはコピペしてから偏差値をもとめればいいのでは?
関連するQ&A
- 標準偏差値が合わない
Excel2007 Windows Vist です。 関数STDEVと関数を使わない方法の両方で 標準偏差値を計算してみました。 セルB2~B8に 9.2 7.7 5.3 6.4 8.5 4.6 6.6 を入力。 関数STDEVを使った場合は 標準偏差値=1.6673332 となります。 関数STDEVを使わない場合は 公式 √{Σ(Xi-Xm)^2/N} をつかい 標準偏差値=1.54365059 となり、値が合いません。 但し Xi :資料の値 Xm:資料の平均値 N :資料の数 とします。 どちらの値を使うべきなのでしょうか。
- ベストアンサー
- その他MS Office製品
- 標準偏差の求め方
現在,Oracleを使って開発を行っています。 そこで、標準偏差を求めたいのですが・・・ Excelでいう「STDEVP」と同じ機能を持つ関数などはないのでしょうか? Oracleには「STDEV」という関数しかありません。 「Excelにデータを書き込んで、STDEVP関数を使う」という方法では 時間がかかりすぎるので、使えません。 何かよい方法をご存知でしたら、教えてください。 よろしくお願いしますm(_ _)m
- ベストアンサー
- Visual Basic
- EXCELの標準偏差について
こんにちは。palbanです。 EXCELで標準偏差を求めています。 STDEV関数を使用しています。 しかし下記のような現象が発生しました。 ●A1~A50まで全ての数値が"27.4" ●STDEV関数を使用して標準偏差値を求めると以下のように なります。 STDEV(A1:A2)=0 STDEV(A1:A3)=4.76837E-07 STDEV(A1:A4)からSTDEV(A1:A10)までは"0" STDEV(A1:A11)からSTDEV(A1:A39)までは"0"以外の数値 ("4.76837E-07"のような数値) STDEV(A1:A40)からSTDEV(A1:A50)までは"0" A1~A50までの数値が全て同じならば結果は"0"に なるとおもうのですが"0"以外の数値が結果として 出てくるのはなぜでしょうか。
- ベストアンサー
- オフィス系ソフト
- 標準偏差値の求め方
標準偏差値を求めるにはどのような記述が必要でしょうか ?エクセルなら、Stdev関数一発で求められますが、今回 の場合、該当する数値の合計変数しか用意しているものが なく、それにどうからめるかが分かりません。 すいませんが、助言お願いします。
- ベストアンサー
- Visual Basic
- EXCEL関数で最大値と最小値を省いた標準偏差
EXCEL関数で最大値と最小値を省いて平均値を求める関数にTRIMMEAN がありますが、これと同様に、EXCEL関数で最大値と最小値を省いた標準偏差を求める関数はありますか?標準偏差を求める関数としてはSTDEVPAがありますが。
- ベストアンサー
- Excel(エクセル)
- ■標準偏差の函数です
標準偏差の函数はSTDEVとSTDEVPの二つがありますが、この違いは何なのでしょうか?どのように使い分けるのでしょうか? 分母がnとn-1の場合とか良く分らないのですが具体的に詳しく教えていただけませんか?お願いします。
- ベストアンサー
- 数学・算数
- エクセル 標準偏差について
セルのA10にAVERAGEで求めた平均値1.5があり、同じくB10に平均値1.6があります。 「平均値の偏差」を求める場合、関数STDEV(A10:B10)で求められるのでしょうか?標準偏差のことがよくわかっていないので困っています。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 標準偏差の算出について質問があります。
野口悠紀雄著『金融工学、こんなに面白い』(文春新書)中の標準偏差の算出で質問があります。 74頁 表3-4に、 円安 円高 標準偏差 A社 1000円 300円 494.97円 とあります。 数学の教科書にあります方法で標準偏差を求めますと、A社の株価の平均は650円ですから、 {(1000-650)×(1000-650)+(300-650)×(300-650)}÷2の平方根で350円になります。エクセルの関数STDEVPで計算しても350ですし、同書79頁の表3-5(III)でも標準偏差は350になっています。 ところがエクセルの関数STDEVで計算しますと、確かに494.97になりますので、著者の間違いとは思えません。 そこでお尋ねします。 (1)上の例で、494.97になる標準偏差と350になる標準偏差は、金融工学的にどういう場合で使い分けるのでしょうか?(エクセルの説明では、前者STDEVは「標本に基づいて予測した標準偏差を返します。」、後者STDEVPは「母集団全体に基づく、ある母集団の標準偏差を返します。」とあります。正直申して、全く意味が分かりません。) (2)494.97になる標準偏差(エクセルの関数ですとSTDEV)の計算方法を教えてください。 数学にも、金融工学にも素人です。なにとぞよろしくお願いいたします。
- ベストアンサー
- その他(投資・融資)
- EXCELの関数"STDEV(標準偏差)"について
EXCEL2002でSTDEV関数を用い標準偏差を出力しておりまして、通常対象となる数値(データ)が全て同じ値となる場合は平均値も同じ値となるため標準偏差"0"となるかと思うのですが、数値が3.974でn数が3,5,6,7の場合"0.0000000596…"のように"0"にならず、頭を悩ませております。 そこで質問なのですが、ズバリ『何故"0"という結果が出ないのか』です。単純な事かもしれませんが有識者の皆様、是非ご教授下さいますようお願い申し上げます。
- ベストアンサー
- オフィス系ソフト