• 締切済み

ExcelVBAでの標準偏差の求め方

ExcelVBAでの標準偏差の求め方 使用ソフト:Excel2003 ExcelVBAで標準偏差を求めたいのですが、 求めたいデータが複数ファイル(最大31ファイル)に渡り、 また全ての行を一つのファイルにまとめようとすると9万行以上になります。 一ファイルあたりは3000行前後です。 一つのファイルに全てのデータがあれば 下記のようにStDev関数を使うのですが、 今回は複数ファイルに渡るので使えません。 Application.WorksheetFunction.StDev(.Range(.Cells(1, 1), .Cells(Y, 1))) また、1つのファイルにまとめるにもExcel2003なので、 65536行までしか行がなくまとめられません。 このような場合、どのように標準偏差を求めればいいのでしょうか? 出来るだけ速度は犠牲にしたくはありませんが、 速度以前に実装すら出来ません…。 どうか先達の皆様、お知恵をお貸しください。 (同じデータに対して平均、最大値も求めていますが、  それは元ファイルから一つ一つのデータファイルを開いて、  WorksheetFunctionのSum関数、Max関数を使用して最後に集計、計算をしています)

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

コードが読めるようでしたら、このようにすれば出来るはずです。 たぶん、数式そのものでも、それぞれの範囲を、引数にすれば取れるはずです。ただ、マクロなら、このようにして、関数を利用しなくても出来るというだけです。 'サンプル '標準モジュール 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

noname#119360
noname#119360
回答No.1

一つのワークシートの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 :資料の数 とします。 どちらの値を使うべきなのでしょうか。

  • 標準偏差について

    標準偏差について MINTABという統計処理ソフトを使って工程能力を計算すると、標準偏差の値がExcelのSTDEV関数を 使って得られた値と異なります。 MINITABの方が厳しく出るようです。 この違いについてご存じの方がいらしゃいましたらご教示下さい。 MINITABの計算式がわかると助かります。        よろしくお願いいたします。

  • 標準偏差の求め方

    現在,Oracleを使って開発を行っています。 そこで、標準偏差を求めたいのですが・・・ Excelでいう「STDEVP」と同じ機能を持つ関数などはないのでしょうか? Oracleには「STDEV」という関数しかありません。 「Excelにデータを書き込んで、STDEVP関数を使う」という方法では 時間がかかりすぎるので、使えません。 何かよい方法をご存知でしたら、教えてください。 よろしくお願いしますm(_ _)m

  • 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関数一発で求められますが、今回 の場合、該当する数値の合計変数しか用意しているものが なく、それにどうからめるかが分かりません。 すいませんが、助言お願いします。

  • EXCEL関数で最大値と最小値を省いた標準偏差

    EXCEL関数で最大値と最小値を省いて平均値を求める関数にTRIMMEAN がありますが、これと同様に、EXCEL関数で最大値と最小値を省いた標準偏差を求める関数はありますか?標準偏差を求める関数としてはSTDEVPAがありますが。

  • ■標準偏差の函数です

    標準偏差の函数は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"という結果が出ないのか』です。単純な事かもしれませんが有識者の皆様、是非ご教授下さいますようお願い申し上げます。

専門家に質問してみよう