- ベストアンサー
エクセルの連勝と連敗をカウントする方法
- エクセルでEからLまでの得点が入っている場合、続いたプラスの数とマイナスの数をカウントする関数式の方法を教えてください。
- A列にはプラスの続いた数を、B列にはマイナスの続いた数を表示する関数式が必要です。
- 例えば、EからLまでの得点が[5, 1, 2, 3, 4, 5, -1, 2, 3]の場合、A列には[5, 1, 2, 3, 4, 5]が表示され、B列には[1, 0, 0, 0, 0, 0]が表示されます。
- みんなの回答 (7)
- 専門家の回答
その他の回答 (6)
- imogasi
- ベストアンサー率27% (4737/17069)
連を数えるのはエクセル関数は苦手のように思う。 其れでVBAでやってみた。 どれだけ(何回)各人が勝ちや負けが込んだ(続いた)のか、見る表になっていると思う。 内容はE-L列で、プラス数とマイナスの連続スパン数の大きいものを計算してA,B列に挙げている。 例データ A1:L4 なお-は左寄せ表示防止のためいれたもの。本当は空白セルです 5 1 - - 1 2 3 4 5 -1 2 3 3 3 - - 3 -1 2 3 2 -1 -1 -2 1 4 - - -1 -2 -3 4 -1 -1 -1 -2 7 1 - - -3 3 4 5 4 4 5 3 標準モジュールに Sub test01() d = Range("E65536").End(xlUp).Row For i = 1 To d pmax = 0 mmax = 0 If Cells(i, "E") >= 0 Then 'E列について maesgn = "p" p = 1 m = 0 Else maesgn = "m" p = 0 m = 1 End If '-- For j = 6 To 12 'F列からL列へ Select Case maesgn Case "p" If Cells(i, j) >= 0 Then p = p + 1 Else maesgn = "m" pmax = WorksheetFunction.Max(pmax, p) p = 0 m = 1 End If '-- Case "m" If Cells(i, j) < 0 Then m = m + 1 Else maesgn = "p" mmax = WorksheetFunction.Max(mmax, m) p = 1 m = 0 End If End Select Next j pmax = WorksheetFunction.Max(pmax, p) Cells(i, "A") = pmax mmax = WorksheetFunction.Max(mmax, m) Cells(i, "B") = mmax Next i End Sub p、mはそのときのプラスとマイナスの続き数、反転すると0にする。 pmax,mmaxはそれぞれの反転時間でのプラスとマイナス数の続き数 ーーーー 結果は上記A,B列 A列はプラスの連続の最大の連続スパン B列はマイナスの数の最大の連続スパン 例えば2行目は プラスは 3 232 の続きがあり、多いほうの数3 マイナスは -1 -1-1-2 の多いほうの3 のように考えた。 ーー 問題の主旨を誤解していたら無視してください。 ただその場合は質問表現に問題あると思うが。 関数では相当難しいとおもったので。関数式では初心者中級者には理解が難しい式の組み合わせになりがちだから。 VBAでは考え付きやすいロジックで、それを素直にコードにしただけ(でもこちらも初心者は無理でVBAやプログラムの慣れがいると思うが) もっと簡単な少ない行数のコードもあるかもしれないが。
お礼
回答ありがとうございます。VBAでのやり方、参考にさせていただきたいと思います。
[No.3この回答へのお礼]へのコメント、 》 たぶん使用しているエクセルが2000と古いためのようです。 なぜそう思うのか理解できません。 私の Excel 2002、2000、97 では全く問題ありません。
お礼
回答ありがとうございます。回答内容のように、まったくこちらの勘違いのようでした。大変失礼しました。
- keithin
- ベストアンサー率66% (5278/7941)
E列からL列まで数字があるとして A1: =SIGN(E1)*MATCH(-1,SIGN(E1:K1*F1:L1),0) をCtrl+Shift+Enterしてみるなど。
お礼
回答ありがとうございます。マイナスでの連敗数はきちんと出ましたが、なぜだかこの式でもプラスではエラー表示されてしまいます。こちらのエクセルの設定に何か問題があるのかもしれません。参考にさせていただきたいと思います。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 横からお邪魔します。 No.1さんの補足に >A列のみに、連続プラスならばプラスの数字、連続ならばマイナス数字で表示できれるやり方を加えて教えていただければ幸いです。 とありますので・・・ A1セルに =IF(E1="","",IF(E1>0,MIN(IF(E1:L1<0,COLUMN(A:H)))-1,-(MIN(IF(E1:L1>0,COLUMN(A:H)))-1))) これは配列数式になってしまいますので、 この画面からA1セルにコピー&ペーストした後に、数式バー内で一度クリックします。 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 このA1セルをオートフィルで下へコピーではどうでしょうか? 以上、参考になれば良いのですが・・・m(__)m
お礼
回答ありがとうございます。うまくできないのはどうも古いエクセルのようです。比較的新しいエクセルで試してみたところ、うまくいきました。補足の気遣い、ありがとうございます。
配列数式に依らない方法(添付図参照) 1.セル P1 に式 =E1>0 を入力 2.セル P1 を右方に(セル W1 まで)ズズーッとドラッグ&ペースト 3.セル N1 に式 =MATCH(FALSE,P1:W1,0) を入力 4.セル O1 に式 =MATCH(TRUE,P1:W1,0) を入力 5.範囲 N1:W1 を下方にズズーッとドラッグ&ペースト 6.セル A1 に式 =IF(E1>0,N1-1,"") を入力 7.セル B1 に式 =IF(E1<0,O1-1,"") を入力 8.範囲 A1:B1 を下方にズズーッとドラッグ&ペースト
お礼
回答ありがとうございます。参考にさせていただきたいと思います。
A1: {=IF(E1>0,MATCH(FALSE,E1:L1>0,0)-1,"")} B1: {=IF(E1<0,MATCH(TRUE,E1:L1>0,0)-1,"")}
お礼
B1の関数式はうまくできましたが、A1の関数式はうまくできませんでした。今回の質問でA1とB1で+、-を分けましたが、A列のみに、連続プラスならばプラスの数字、連続ならばマイナス数字で表示できれるやり方を加えて教えていただければ幸いです。 回答ありがとうございました。
お礼
回答ありがとうございます。図まで貼り付けていただき、うまくできるはずなのですが、なぜか#N/Aエラーがでてしまいます。回答1ではマイナスは正しく表示されるのですが、プラスでは同じように#N/Aです。なぜなのか解りません。?????たぶん使用しているエクセルが2000と古いためのようです。