ここから本文です

【250枚】VBAに自信のあるひと、この関数をつくってください…

che********さん

2009/11/105:18:03

【250枚】VBAに自信のあるひと、この関数をつくってください…

Q検定という統計処理です

説明
セルの縦の範囲を考えるとします(A1~An)
そこには実験値がそれぞれあって、その中に誤差が気になるものがあり、取り除くべきか・取り除かないべきか
ということを統計処理する検定です

(最大値-次の最大値)/(最大値-最小値)またはabs(最小値-次の最小値)/(最大値-最小値)
が値Qより 小さければOK 大きければNO
それぞれ(←これ大事)の実験値においてそれらがOKであるかどうか確かめる関数をつくりたいです

VBAでは失敗しましたが、excelでは成功しました!
それを書きます

=IF(OR(AND(あるセル<>MAX(A1~An),あるセル<>MIN(A1~An)),(ABS(あるセル-IF(あるセル=MAX(A1~An),LARGE(A1~An,2),SMALL(A1~An,2)))/(MAX(A1~An)-MIN(A1~An)))<Q値),"OK","NO")

これをVBAの関数で
QQQ(セルの範囲、セル、Q値)で定義してください

閲覧数:
398
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

riv********さん

2009/11/107:02:18

何の工夫もなく必要な値を関数で取得してあなたの計算式をそのまま使いました。
結果はBooleanにしています OKのときtrue
数値の精度が分からなかったのですべてdoubleにしています。
Function Q検定(R As Range, Q As Double) As Boolean
Dim 最大値 As Double
Dim 次最大値 As Double
Dim 最小値 As Double
Dim 次最小値 As Double
Dim 比較値1 As Double
Dim 比較値2 As Double
最大値 = WorksheetFunction.Max(R)
次最大値 = WorksheetFunction.Large(R, 2)
最小値 = WorksheetFunction.Min(R)
次最小値 = WorksheetFunction.Small(R, 2)
比較値1 = (最大値 - 次最大値) / (最大値 - 最小値)
比較値2 = Abs(最小値 - 次最小値) / (最大値 - 最小値)
If 比較値1 < Q Or 比較値2 < Q Then
Q検定 = True
Else
Q検定 = False
End If
End Function

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる