- 締切済み
エクセルで同じ文字列が連続する数
野球の球種で、連続する文字列が、 1 直球 カーブ 直球 直球 =直球2 2 直球 直球 直球 スライダー =直球3 3 スライダー スライダー 直球 直球 カーブ =直球2 スライダー2 4 直球 カーブ =0 5 直球 カーブ 直球 カーブ =0 とするような場合はどのような関数を使用すれば良いのでしょうか? ご教授願います!
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 色々やり方はあると思いますが、一例です。 ↓の画像のようにSheet2を作業用のSheetとして使用します。 野球の球種のようですので、とりあえず一人最大20球まで対応できるようにしてみました。 まずSheet2のA1セルに =IF(Sheet1!A1="","",1) という数式を入れます。 次にSheet2のB1セルに =IF(Sheet1!B1="","",IF(Sheet1!B1=Sheet1!A1,A1+1,1)) という数式を入れ20球目のT1セルまでフィルハンドルでコピー 次にA1~T1セルを範囲指定 → T1セルのフィルハンドルでずぃ~~~!っと下へコピーしておきます。 このSheet2のデータを利用します。 最後にSheet1のU1セルに =IF(COUNTA($A1:$T1),IF(COUNTIF(Sheet2!$A1:$T1,">1"),IF(COUNTIF(Sheet2!$A1:$T1,MAX(Sheet2!$A1:$S1))<COLUMN(A1),"","="&INDEX($A1:$T1,,SMALL(IF(Sheet2!$A1:$T1=MAX(Sheet2!$A1:$T1),COLUMN($A1:$T1)),COLUMN(A1)))&MAX(Sheet2!$A1:$T1)),IF(COLUMN(A1)=1,"=0","")),"") これは配列数式になりますので、Ctrl+Shift+Enterで確定! この画面からコピー&ペーストする場合、 上記数式をドラッグ&コピー → U1セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま) Ctrl+Shiftキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 このU1セルを列・行方向にフィルハンドルでコピー! これで画像のような感じになります。m(_ _)m
- Cupper-2
- ベストアンサー率29% (1342/4565)
まあ、やり方はいくつもありますが・・・とりあえず!(長いですけどw) 関数の前に、質問者さんが紙の上で一つずつ行うとしたら、どんな手順で行うかを考えてください。 例えば、 >1 直球 カーブ 直球 直球 の場合、 まずは一つ目の「直球」の次に何があるかを確認しますよね。 この場合、「カーブ」ですので連続していません。連続0 次に二つ目の「カーブ」の次に何があるかを確認しますよね。 この場合、「直球」ですので連続していません。連続0 次に三つ目の「直球」の次に何があるかを確認しますよね。 この場合、「直球」ですので連続しています。連続1 更にその次に何があるのかを確認しますよね。 この場合、何もないので連続していません。連続1止まりです。 次に四つ目の「直球」の次に何があるかを確認しますよね。 この場合、なにもありませんので連続していません。連続0 この中で一番連続数の多いのは「直球」が1回連続した場合ですので 表示は「直球」1回連続(直球2) のようになると思います。 同じ文字列が並んでいることを調べるために、とにかく隣の値と比較することを行わなければなりません。 これをひとつずつExcelの表記に直せばOK。 当然、作業用のセルを設けて順序立てて考えましょう。 そんなこんなで、自分なら次のようなアルゴリズムで考えます。 右隣が同じ文字列でなければ0を立てます。 右隣が同じ文字列なら1を立てます。 さらに前の検査で立てた左の数値との和を取ります(足すってこと) これを必要数繰り返します。 最後に一番大きな数値になっている文字列が何かを検査して表記します。 B1セルから球種が横に書かれていて、その下の行を作業セルとするなら B2セルに =IF(B1=C1,1+A2,0) のように関数式を入力して、E2セルまでコピーします。 そしてA1セルに結果を返す関数式を ="=" & INDEX(B1:E1,MATCH(MAX(B2:E2),B2:E2,0)) & TEXT(MAX(B2:E2),0) のように入力します。 (何をしているのか、よく確認してください。MATCH関数で最大数が左から何番目にあるかを調べてINDEX関数で対応する文字列を検索・・・ってね。) ちなみにこれ、空白も文字列として検出しますので、思ったような結果が出ない可能性があります。 また同じ連続数の文字列を複数検出することはできません。 そこのところは質問者さん自身で考えるか、もっと効率の良い回答を待つか、面倒だから目で見て手で記入するかを選んでください。 考え方は示しましたので、連続した最大数が二つ以上ある場合について自身で考えてみることを強くお勧めします。 (そうすることで、いろいろなケースでも自身で答えを導き出せるようになります)