![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ExcelVBAでの標準偏差の求め方
使用ソフト:Excel2003
ExcelVBAで標準偏差を求めたいのですが、
求めたいデータが複数ファイル(最大31ファイル)に渡り、
また全ての行を一つのファイルにまとめようとすると9万行以上になります。
一ファイルあたりは3000行前後です。
一つのファイルに全てのデータがあれば
下記のようにStDev関数を使うのですが、
今回は複数ファイルに渡るので使えません。
Application.WorksheetFunction.StDev(.Range(.Cells(1, 1), .Cells(Y, 1)))
また、1つのファイルにまとめるにもExcel2003なので、
65536行までしか行がなくまとめられません。
このような場合、どのように標準偏差を求めればいいのでしょうか?
出来るだけ速度は犠牲にしたくはありませんが、
速度以前に実装すら出来ません…。
どうか先達の皆様、お知恵をお貸しください。
(同じデータに対して平均、最大値も求めていますが、
それは元ファイルから一つ一つのデータファイルを開いて、
WorksheetFunctionのSum関数、Max関数を使用して最後に集計、計算をしています)
A 回答 (2件)
- 最新から表示
- 回答順に表示
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 統計学 確率統計でExcelの使い方を教えてください。 3 2022/07/27 19:21
- 統計学 t検定について教えてください 2 2023/02/23 16:35
- 統計学 生物統計学の質問 7 2022/05/17 13:59
- 統計学 統計学の問題です!急ぎです 1 2023/02/08 13:51
- Excel(エクセル) 【エクセル】元データからの引用 5 2022/04/18 10:22
- 統計学 教えて数学! 標準偏差 2 2023/03/30 22:41
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- 統計学 風速を1秒刻みで推定する方法 6 2023/03/03 11:58
- 統計学 t値の計算方法 1 2022/11/29 18:37
- 統計学 直線の傾き(回帰係数)から相関係数を計算できるのでしょうか? 2 2022/09/16 19:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
特定のエクセルファイルを起動...
-
Batch: フォルダ内の特定のファ...
-
VBAでCSVファイルが使用中かど...
-
共有フォルダに誰が何にアクセ...
-
月が変わったら自動でシートが...
-
(Excelマクロ)datファイルをエ...
-
mdbファイル フォームを開くと...
-
AccessVBAで作成したExcelファ...
-
tmpファイル なぜできる?削除...
-
Access VBA を利用して、フォル...
-
ファイルの途中に文字列を挿入
-
エクセルファイルのデータ転記...
-
VBAで複数ファイルからのデ...
-
XMLデータを変換し印刷する方法
-
複数ファイルのデータの統合に...
-
access関数を説明できる方いま...
-
大量のCSVデータを行列の変換を...
-
Excel VBA 処理後データが重た...
-
AccessにリンクさせたExcelファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
共有フォルダに誰が何にアクセ...
-
特定のエクセルファイルを起動...
-
Batch: フォルダ内の特定のファ...
-
Access VBA を利用して、フォル...
-
tmpファイル なぜできる?削除...
-
VBAでCSVファイルが使用中かど...
-
AccessVBAで作成したExcelファ...
-
月が変わったら自動でシートが...
-
excelを共有ファイルにすると行...
-
【アクセス】「ほかのユーザー...
-
(Excelマクロ)datファイルをエ...
-
ファイルの途中に文字列を挿入
-
相手のPCにVBAからメッセ...
-
mdbファイル フォームを開くと...
-
Excel VBA 処理後データが重た...
-
社内Excel共有ブックでの保存ト...
-
拡張子が「cda」のファイルを聞...
-
事務の派遣で働いています。多...
-
【VBA】異なる行だけを抜き出す...
おすすめ情報