Selectionを使い、一般化してあります。
ワークシート上のデータの入っているセルを範囲指定して
それから実行してください。
(1)データが1列でなくてもできそうです。
飛び飛びセルはテストしてません。
(2)Msgboxは途中確認のために多用しています。
Cells(i,"A")=等と置換えるのも良いと思います。
(3)条件に合うものを、例としてE列に書き出しています。j列に書き出すのならCells(n, "E") = clともう一箇所の"E"を"J"に変えてください。
(4)後半について充分テストしてません。なにかあれば
言ってください。
(5)Stdevを使い、Stdevpを使っていません。問題の
例の数値から推定して。
Sub test01()
'a = WorksheetFunction.Average(Range("a1:a5"))
a = WorksheetFunction.Average(Selection)
MsgBox a
's = WorksheetFunction.StDev(Range("a1:a5"))
s = WorksheetFunction.StDev(Selection)
MsgBox s
Dim cl As Range
n = 1
For Each cl In Selection
If cl > a - s And cl < a + s Then
Cells(n, "E") = cl
n = n + 1
End If
Next
avgb = WorksheetFunction.Average(Range(Cells(1, "E"), Cells(n, "e")))
MsgBox avgb
End Sub
お礼
ご回答有り難うございます。 目的のものが大筋で出来ました! あとは、セルを少し移動したりして 完成させたいと思います。 どうも丁寧に有り難うございました。