質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

スプレッドシートで記録している勝敗成績の連勝数ごとの回数をカウントしたい

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 178

kikuchi33

score 9

やりたいこと

Googleスプレッドシートで、
紅組・白組の勝敗記録を取っています。

行ごとに紅白どちらが勝ったか勝敗を記録して、
連勝したときはその連勝数も記録しています。
(詳しい仕様は後述)

紅白組それぞれで、
「2連勝止まりは●回」
「3連勝止まりは●回」
「4連勝止まりは●回」
という形で連勝数ごとにカウントをしたいと考えていますが、
具体的な実現方法が思いつきません。

実際の表ファイル

以下が実際のGoogleスプレッドシートファイルとなります。
https://docs.google.com/spreadsheets/d/1LhiR3GDR4tqNt6JMHw1CWJUwc4eLdHbi9h3Bm2TsJLQ/edit?usp=sharing

C列に勝った組の名前(紅または白)を入力し、
紅組が勝った行はD列に1、白組が勝った行はF列に1を入力、
紅組連勝数はE列に、白組連勝数はG列に自動で入るようにしています。

このB~G列にある表の成績(連勝数を取っているE列とG列の値)を元にして、
J2に紅組1勝止まり回数、
J3に紅組2連勝止まり回数、
J4に紅組3連勝止まり回数…
M2に白組1勝止まり回数、
M3に白組2連勝止まり回数、
M4に白組3連勝止まり回数…
を自動で入力させたいと思っています。

今回のサンプルファイルの例ですと、
紅組1勝止まり回数は1、
紅組2連勝止まり回数は0、
紅組3連勝止まり回数は2、
紅組4連勝止まり回数は2…
白組1勝止まり回数は0、
白組2連勝止まり回数は2、
白組3連勝止まり回数は0…
というような結果を自動で計算させたいです。

例えば、紅組2連勝止まりだった回数をカウントするために
E列にある「2」をカウントするだけだと
3連勝以上している最中の「2」もカウントされてしまうため適していません。

具体的な実現方法が全く思いつかず、
あまりないケースなのか検索しても参考になる情報がヒットしなかったため、
お知恵をお貸しいただければ幸いです。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

E列の連勝数の3行目ですが、以下のようにするとエラーを回避できて、下にそのままコピペで動きます。
E3↓

=IFS(ROW(E3)=3,D3,AND(D3=1,E2>1),D3+E2,D3=1,D3+D2,D3="",0)

本題の方の連勝のカウントは「〇勝止まり回数」ということで、E列、G列の 連勝数の数が 〇 であり、かつ その次の試合は相手が勝っている(一つ下の行の 相手の連勝数が 0より大きい)というルールになるかと思います。

よって、参照を1つずらした形で以下のように COUNTIFSで式にしてあげればよいです。ついでに、I列の〇連勝の部分の数字を取得して数式に組み入れてあげると コピペでもいけますし、ArrayFormula も使えます。

J2↓

=COUNTIFS($E$3:$E$32,REGEXEXTRACT(I2,"[0-9]+"),$G$4:$G$33,">0")

別に1つずらして参照する範囲は相手の連勝数(G列)である必要はなく、D列が空欄やE列が1より小さいなどの条件でも良いです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/13 16:36

    お返事ありがとうございます。

    なるほど、相手の連勝数列である必要はないとのことで、
    再度試してみたところ「E列が1より小さい」という条件で
    理想通りの動作になりました。

    お忙しいところ丁寧にご回答いただき、
    誠にありがとうございました。

    この参照を1つずらすというのは、
    今回投稿いただいたコードを実際に使ってみ動作することはわかったのですが、
    理屈がよくわかりません。

    どのようなキーワードで検索した解説記事で勉強すればよいのか、
    もし可能であれば教えていただければ幸いです。

    よろしくお願いいたします。

    キャンセル

  • 2020/07/13 16:55 編集

    問題解決となり良かったです。最後の一歩を自分でやったことで、今後にいかせるものとなっていれば幸いです。

    解説記事は、ぱっと思い浮かばないですし、私もうまく説明は出来ませんが、こういったCOUNTIFS等の関数の範囲部分はサイズ(今回でいえば行数)が揃ってればなんでもよくて、それらがセットで一つずつ下に動いて条件に合致しているかを判断する動きをしてるイメージです。

    これを応用することで作業列なしで、式の中でバーチャルな表を作って関数を動かせるのがGoogleスプレッドシートのいいところかなと。

    キャンセル

  • 2020/07/14 16:25

    ありがとうございます。
    お陰様でこの経験を今後に活かせます。

    解説についてもありがとうございました。
    いろいろサンプルを作って身につけたいと思います。

    この度は本当にありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る