
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
VB6.0でファイルの一行だけ削除...
-
拡張子が「cda」のファイルを聞...
-
Batch: フォルダ内の特定のファ...
-
COM+を使ってネットワーク越し...
-
社内Excel共有ブックでの保存ト...
-
Access2007でldbファイルが...
-
HttpWebRequestのレスポンスを...
-
JSONファイルの置き場所について
-
excelを共有ファイルにすると行...
-
事務の派遣で働いています。多...
-
phpで連番
-
SQLPLUSで結果を画面に表示しない
-
Accessで以下のシステムを1か...
-
「○○○.ldb」のAccess レコード ...
-
オラクル(PL/SQL)のエラー
-
Access95のエクスポートで教え...
-
100万行のCSVを10万行ずつのフ...
-
AccessのDB破損に関して お教...
-
Access インポート
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
特定のエクセルファイルを起動...
-
共有フォルダに誰が何にアクセ...
-
【アクセス】「ほかのユーザー...
-
(Excelマクロ)datファイルをエ...
-
VBAでCSVファイルが使用中かど...
-
社内Excel共有ブックでの保存ト...
-
Batch: フォルダ内の特定のファ...
-
excelを共有ファイルにすると行...
-
Access VBA を利用して、フォル...
-
Excel VBA 処理後データが重た...
-
拡張子が「cda」のファイルを聞...
-
AccessVBAで作成したExcelファ...
-
月が変わったら自動でシートが...
-
XMLデータを変換し印刷する方法
-
batファイル、コマンドプロンプ...
-
相手のPCにVBAからメッセ...
-
Access2007でldbファイルが...
-
tmpファイル なぜできる?削除...
-
mdbファイル フォームを開くと...
おすすめ情報