|
はじめまして。
今、VBAで感度、特異度、1−特異度を算出し、最終的にはROC曲線を作成したいと思っています。
A B
1 2.35 a
2 19.81 b
3 5.63 a
・・・
このようなセルが、120行まで続いています。
aを周期ありとして、122行から、
122 0.01 周期あり 周期なし
123 以上 ○ △
124 未満 □ ■
125 合計 ☆ ◎
126 感度 ▲
127 特異度 ★
128 1−特異度 ●
129
130 0.02 周期あり 周期なし
131 以上
132 未満
133 合計
134 感度
135 特異度
136 1-特異度
・・・
というように、縦に表示させていきたいと考えています。
まず、ためしに、0.01における感度と特異度、1−特異度出力されるようにしてみました。
インターネットや本で探りながら、下記のようにやってみました。
Sub test1()
k = 0.01
i = 1
myshift = 121
Cells(myshift + (i * 8 - 7), 1) = k
Cells(myshift + (i * 8 - 7), 2) = "周期あり"
Cells(myshift + (i * 8 - 7), 3) = "周期なし"
Cells(myshift + (i * 8 - 7) + 1, 1) = "以上"
Cells(myshift + (i * 8 - 7) + 2, 1) = "未満"
Cells(myshift + (i * 8 - 7) + 3, 1) = "合計"
Cells(myshift + (i * 8 - 7) + 4, 1) = "感度"
Cells(myshift + (i * 8 - 7) + 5, 1) = "特異度"
Cells(myshift + (i * 8 - 7) + 6, 1) = "1−特異度"
Range(Cells(myshift + (i * 8 - 7) + 1, 2)).Value = Evaluate("SUMPRODUCT(((A1:A120)>=k)*((B1:B120)=a))")
Range(Cells(myshift + (i * 8 - 7) + 1, 3)).Value = Evaluate("SUMPRODUCT(((A1:A120)>=k)*((B1:B120)=b))")
Range(Cells(myshift + (i * 8 - 7) + 2, 2)).Value = Evaluate("SUMPRODUCT(((A1:A120)<k)*((B1:B120)=a))")
Range(Cells(myshift + (i * 8 - 7) + 2, 3)).Value = Evaluate("SUMPRODUCT(((A1:A120)<k)*((B1:B120)=b))")
End Sub
しかし、「エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。」が出てしまいました。
SUMPRODUCTを使わないで、COUNTIFなども使ってみましたが、どうにも動きません。
VBA初心者なのですが、勉強したいと思い、いろいろと挑戦しているところです。
もしよかったら、ご回答いただけるとうれしいです。
|
|