Attribute VB_Name = "binom" Function critbinomex(試行回数, 成功率_母比率, 確率) '返値:限界値 '=CRITBINOM(100,0.5,0.05/2) n = 試行回数 p0 = 成功率_母比率 p = 確率 '前処理 If (p0 <= 0) Or (p0 >= 1) Then critbinomex = "#NUM!:母比率は0と1の間です" Exit Function End If If (p < 0) Or (p > 1) Then critbinomex = "#NUM!:上側累積確率は0以上1以下の値です" Exit Function End If n = Int(n) 'nは整数。小数点以下は切り捨て If n <= 0 Then critbinomex = "#NUM!試行回数は1以上の数です" Exit Function End If '本処理 tmp = binominv(n, p0, p) critbinomex = Int(tmp * n) '母比率より高いときは小数点以下切り捨て If (tmp < p0) And (tmp <> critbinomex) Then '母比率より低いときは小数点以下切り上げ critbinomex = critbinomex + 1 End If End Function Function binominv(試行回数, 成功率_母比率, 確率) '返値:成功回数の比率(母比率より上と下で違ってくる。' ' 母比率より下では(1-確率)の下側確率を確保 ' 母比率より上では(確率)の上側確率を確保 ' '=betainv(alpha/2,k,n-k+1) n = 試行回数 p0 = 成功率_母比率 p = 確率 esp = 0.000000000001: '1e-12 If (p0 >= 1#) Or (p0 <= 0#) Or (p >= 1#) Or (p <= 0#) Then binominv = "#NUM!" Exit Function End If xl = 0# xr = n k = 0 Do k = k + 1 xm = (xl + xr) * 0.5 If p0 * n >= xm Then temp = Application.BetaInv(1 - p, xm + 1, n - xm): Else temp = Application.BetaInv(1 - p, xm, n - xm + 1) End If If (temp < p0) Then xl = xm Else xr = xm End If If xm = 0 Then Exit Do If k >= 100 Then Exit Do Loop Until ((Abs(xr - xl) / n) < esp) binominv = xm / n If binominv < esp Then binominv = 0 If (1 - binominv) < esp And xr = n Then binominv = 1 If k >= 100 Then If xl = 0 Then binominv = 0 Else: If xr = n Then binominv = 100 Else binominv = "収束しませんでした:k>=100:xl" + Str(xl) + ":x=" + Str(xr) End If End If End Function Function binomdistex(成功数, 試行回数, 成功率, 関数形式) 'BINOMDIST(成功数, 試行回数, 成功率, 関数形式) 'BETADIST(x, α, β, A, B) x = 成功数 n = 試行回数 p0 = 成功率 ftype = 関数形式 If p0 > 1 Or p0 < 0 Or n < x Or n < 1 Then binomdistex = "#NUM" Exit Function End If If n < x Or n < 1 Then binomdistex = "#NUM:試行回数は1以上かつ成功数以上でなけばなりません" Exit Function End If binomdistex = 0 If x = n Then binomdistex = 1 Else binomdistex = 1 - Application.BetaDist(p0, x + 1, n - x) End If If Not (ftype) Then If x = 0 Then Exit Function y = 1 - Application.BetaDist(p0, x, n - x + 1) binomdistex = binomdistex - y End If End Function