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] ...
-
共有フォルダに誰が何にアクセ...
-
AccessVBAで作成したExcelファ...
-
Batch: フォルダ内の特定のファ...
-
【アクセス】「ほかのユーザー...
-
Access VBA を利用して、フォル...
-
tmpファイル なぜできる?削除...
-
VBAでCSVファイルが使用中かど...
-
mdbファイル フォームを開くと...
-
共有フォルダのアクセスログに...
-
batファイル、コマンドプロンプ...
-
ファイルの途中に文字列を挿入
-
Excel VBA 処理後データが重た...
-
iniファイル内の行を削除する方法
-
(Excelマクロ)datファイルをエ...
-
エクセルVBAでフォルダ内の全フ...
-
phpで連番
-
Excelのデータを分割したい(マ...
-
ファイルを開いたことを検知したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共有フォルダに誰が何にアクセ...
-
【Excel】[Expression.Error] ...
-
特定のエクセルファイルを起動...
-
Batch: フォルダ内の特定のファ...
-
VBAでCSVファイルが使用中かど...
-
月が変わったら自動でシートが...
-
AccessVBAで作成したExcelファ...
-
tmpファイル なぜできる?削除...
-
Access VBA を利用して、フォル...
-
(Excelマクロ)datファイルをエ...
-
事務の派遣で働いています。多...
-
Excel VBA 処理後データが重た...
-
excelを共有ファイルにすると行...
-
【アクセス】「ほかのユーザー...
-
XMLデータを変換し印刷する方法
-
CSVの項目行を削除して一つのフ...
-
mdbファイル フォームを開くと...
-
社内Excel共有ブックでの保存ト...
-
ファイルの途中に文字列を挿入
-
拡張子が「cda」のファイルを聞...
おすすめ情報