- 締切済み
連続勝率数をカウントする
Excelの関数でどうすればよいか困っています。 ExcelはMicrosoft365を利用しており関数のみで数字を出したいです。 行や列はあまり増やしたくないです。 ■背景 例えば、100回行うテストがあります。80点以上を合格として1回目から数えて連続合格の回数を調べたいです。 Aさんは1回目から80点以上を5回連続とっている = 5連続 Cさんは1回目は80点未満で不合格2回目移行は連続合格 = 0連続 というようなカタチ ifやandを工夫してやろうと思いましたが、件数が多いのでどのような関数を使えば効率よく記載できますでしょうか? ifだとif(and(B3>=80,C3>=80・・・・とたくさん書かないといけないので ご教授の程よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- SI299792
- ベストアンサー率47% (780/1631)
すみません。数式修正します。 前の式でも構わないのですが、データが増えた場合のレスポンスを考えると、範囲指定した方がいいです。 1番右のCX列は空白という前提で、 B12 =MATCH(TRUE,B3:CX3<$B$7,0)-1 下へコピペ。 もし、CX列を使っている場合は B12 =IFERROR(MATCH(TRUE,B3:CW3<$B$7,0)-1,100) 下へコピペ。
- imogasi
- ベストアンサー率27% (4737/17069)
問題の件数の数え方にあいまいな点がある。コンピューターのことなので表現を工夫するか(1件と数えない例を挙げるとか)、データ実例をあげるのがよい。この点文章は、他人には、わかりにくいものだ、という認識が、経験から、多くの質問者に欠けている。 関数で作業列や作業行を使いたくないという質問者も多いが、わがままだろう。 それに拘ると、却って難しいケースが多いと感じる。 本件VBA向きの課題だと思う。とりあえずやってみたが、質問者の場合に合わせて微修正が必要だろうが、それができず、意味ないかも。無視してもよい。 テストは5例ぐらいしかやってないので、多様なケースの対応を漏らし、誤りがあるかも。 関数だけでの回答が出れば、素晴らしいと思うが、出るかな?出ても、式が難しく、鵜呑みしかないだろうと思う。 ーーー 標準モジュールに Sub test01() retusu = 30 '列数は30列とする Range("a1").CurrentRegion.Interior.ColorIndex = xlNone 'セル塗りつぶしクリア lastrw = Range("A100000").End(xlUp).Row '最終行取得 MsgBox lastrw For i = 1 To lastrw '最終行まで各行繰り返す j = 1 '各行でのスタート列 kensu = 0 ’各行での該当の連の数を0 p1: If Application.CountIf(Range(Cells(i, j), Cells(i, j + 4)), ">=80") >= 5 Then MsgBox i & "-" & j & "=" & i & "-" & j + 4 Range(Cells(i, j), Cells(i, j + 4)).Interior.ColorIndex = 6 'vbYellow kensu = kensu + 1 j = j + 5 If j > retusu Then GoTo p2 Else GoTo p1 End If Else j = j + 1 If j > retusu Then GoTo p2 Else GoTo p1 End If End If p2: Cells(i, 32) = kensu Next i End Sub 実行すると連続した5セルに色が着く。32列目に件数を出した。
- SI299792
- ベストアンサー率47% (780/1631)
- kon555
- ベストアンサー率51% (1845/3565)
カウント列を一列だけ増やす必要があります。 カウント列は最初を0にし、その下のセルからからif関数で『合格点以上なら1つ上のセルにの値に1足す、未満ならゼロ』とすれば、連続合格数がカウントできます。
補足
列や行を増やさないカタチが望ましいです。増やさないと出来ないなら仕方ないですが、たくさんのシートがあるのでその度に増やすのは大変になります。できれば関数のみでやりたいです。