• ベストアンサー

エクセル、○が連続する回数を数えるには?

エクセルで、○が連続するケースの数を数えるには? 今、A1~BB1まで、○が入った表が在ります。その中で、○○のように、○が連続するケースの数を数えて表示する関数をBC1のセルに入れたいと思います。 因みに、下記の表では、○が連続するケースは3つです。 宜しくお願いします。 ×××○××○○×××××○××○×××××○○○×××○×××○×××○○×××・・・・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.10

>No.9では、Sheet1とSheet2を使うようですね? そうです。 Sheet1のA1にあるマークをチェックするためにSheet2のA1セルに関数式を入れます。 Sheet1のB1にあるマークをチェックするためにSheet2のB1セルに関数式を入れます。 Sheet1のC1からBB1セルのマークをチェックするための関数式はSheet2のB1セルをSheet2のC1からBB1セルにコピーします。 >それぞれの何処にどのような関数を入れるのでしょうか? Sheet2のA1には次の関数式を入力します。 =IF(Sheet1!A1="○",1,0) A1は先頭セルなので単独に判定し、○の時は1、×の時は0になるよう論理式を使います。 Sheet2のB1には次の関数式を入力します。 =IF(Sheet1!B1="○",A1+1,0) B1は○の時A1プラス1とし、×の時は0になるよう論理式を使います。 回答No.7では複雑な論理式を提示しましたが結果として今回の論理式で良いことが分かりました。 Sheet2の1行目をA1からBB1まで選択し、2行目から50行目までコピーします。 Sheet1のBC1には次の関数式を入力します。 =COUNTIF(Sheet2!A1:BB1,2) この関数式はSheet2のA1からBB1までの間に値が2であるセルの数をカウントします。 Excel 2013の場合は関数式が不適切となる場合がありますので、その時はBD1に関数式を入力してください。 Sheet1のBC2からBC50まではBC1をコピーします。

heisenberg
質問者

お礼

懇切で丁寧なご説明、有り難うございました。 お陰さまで、期待通りの処理が出来ました。 また、何かありましたら、宜しくお願い致します。

その他の回答 (10)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.11

#3です、 「シート1にデータがあるなら、シート2からシート1を参照すれば」と思ったら もう既に他の方が回答されてますね。

heisenberg
質問者

お礼

再度のご登場、有り難うございます。 今回は、別の方の回答が有益でしたのでそれを使わせて頂きますが、またの機会には、宜しくお願い致します。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.9

>わたしがしたかった作業は、仮に「×○×××○○××○○×・・・」というような行がA1からBB50までのセルに在った場合、 作業用セルの位置を変更するだけで同じ手法が利用できます。 ○、×のデータのみSheet1のA1からBB50までとして作業用セルをSheet2の相対セルにする方法が分かり易いと思います。

heisenberg
質問者

お礼

再度のご回答、有り難うございます。 全くの文系人間で、関数にも素人ですので、No.7のご回答のように、改めて、丁寧にご教示頂けないでしょうか? No.9では、Sheet1とSheet2を使うのでしょうか? もし、そうでしたら、それぞれのシートには、どこにどのような関数が入るのでしょうか? お手数ですが、宜しくお願い致します。

heisenberg
質問者

補足

No.9では、Sheet1とSheet2を使うようですね? それぞれの何処にどのような関数を入れるのでしょうか? 宜しくお願い致します。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.8

>というような行がA1からBB50までのセルに在った場合 という状況を織り込んだ方法を回答済みですが、寄せられた回答をどれも同じと思い込んでロクに見ても試してもいない、失礼な方だということが良くわかります。 #既に×が付いてた方でしたのでもう回答はしないつもりでしたが、これにて。

heisenberg
質問者

補足

ご機嫌を損ねてしまったのでしたら、謝ります。 ご教示頂いた方法を試してみたのですが、期待した結果が出ないのです。 ○の連続が在るのに0と表示されたり、逆に、無いのに2と表示されたり・・・。 何処に問題があったのか、見直してみます。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.7

考え方としてA1からBB1までのセルに○または×が1つずつ保存されていることを条件とします。 A1のセルはチェック対象の先頭あるので特別の扱いになります。 作業用にA2からBB2までを使う条件で考えます。 A2には次の式を使います。 =IF(A1="○",1,0) B2には次の式を使います。 =IF(AND(A1="×",B1="○"),1,IF(AND(A1="○",B1="○"),A2+1,0)) C2からBB2まではB2をコピーします。 BC1には次の式を使います。 =COUNTIF(A2:BB2,2) 作業用セルには×の列に0が、○の列には○の連続数が入りますので2が入っているセルの個数を数えれば目的の結果を得られます。

heisenberg
質問者

お礼

ご回答、有り難うございます。 件(くだん)の質問は、削除、或いは締め切りたかったのですが、方法が分からず、そのままにしておきました。 で、本件ですが、実は、わたしの説明不足で、皆さまにはご迷惑をおかけしました。わたしの本意は、「対象行が1行だけではなく、複数行の場合」だったのです。 皆さまのご提案は、対象行が1行だけでしたら完全ですが、複数行では使えませんよね? わたしがしたかった作業は、仮に「×○×××○○××○○×・・・」というような行がA1からBB50までのセルに在った場合、AC1に入力してAC50までドラッグし、「○○」のように、「○が連続する回数が各行に何回あるかを、AC1からAC50のそれぞれのセルに表示させる」関数、或いは方法を知ることでした。 さしでがましいですが、もし、そのような関数か方法があれば、ご教示願えれば有り難いです。

heisenberg
質問者

補足

申し訳ありません。 「お礼欄」で「AC1」としたのは、正しくは、「BC1」です。 宜しくお願い致します。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.6

回答No5です。 ごめんなさい。No5の解答では○が3個以上にも続いた場合には正しい答えが得られません。 次のようにしてください。 作業のための列や行を作って対応します。 例えばBE1セルには次の式を入力してDF1セルまで横方向にドラッグコピーした後で下方にもドラッグコピーします。 =IF(COUNTIF(A1:B1,"○")=2,IF(BD1="",0,BD1)+1,"") お求めの値をBC列に表示させるためにはBC1セルには次の式を入力して下方にドラッグコピーします。 =IF(COUNT(BE1:DF1)=0,"",COUNTIF(BE1:DF1,1))

heisenberg
質問者

お礼

ご回答、有り難うございます。 実は、わたしの説明不足で、皆さまにはご迷惑をおかけしました。わたしの本意は、「対象行が1行だけではなく、複数行の場合」だったのです。 皆さまのご提案は、対象行が1行だけでしたら完全ですが、複数行では使えませんよね? わたしがしたかった作業は、仮に「×○×××○○××○○×・・・」というような行がA1からBB50までのセルに在った場合、AC1に入力してAC50までドラッグし、「○○」のように、「○が連続する回数が何回あるか」を表示させる関数、或いは方法を知ることでした。 さしでがましいですが、もし、そのような関数か方法があれば、ご教示願えれば有り難いです。

heisenberg
質問者

補足

申し訳ありません。 「お礼欄」で「AC1」としたのは、正しくは、「BC1」です。 宜しくお願い致します。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

作業のための列や行を作って対応します。 例えばBE1セルには次の式を入力してDF1セルまで横方向にドラッグコピーした後で下方にもドラッグコピーします。 =IF(COUNTIF(A1:B1,"○")=2,IF(BD=1,"",1),"") お求めの値をBC列に表示させるためにはBC1セルには次の式を入力して下方にドラッグコピーします。 =IF(COUNT(BE1:DF1)=0,"",SUM(BE1:DF1))

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

猿でもできる簡単な方法: 今○×がシート1のA1からBB1まで記入してあるとして 仮にシート2のA1に =IF(Sheet1!A1="○",B1+1,0) と記入,右向けにBB1までコピー シート1に戻りBC1に =MAX(Sheet2!1:1) と記入して完成。

heisenberg
質問者

お礼

ご回答、有り難うございます。 実は、わたしの説明不足で、皆さまにはご迷惑をおかけしました。わたしの本意は、「対象行が1行だけではなく、複数行の場合」だったのです。 皆さまのご提案は、対象行が1行だけでしたら完全ですが、複数行では使えませんよね? わたしがしたかった作業は、仮に「×○×××○○××○○×・・・」というような行がA1からBB50までのセルに在った場合、AC1に入力してAC50までドラッグし、「○○」のように、「○が連続する回数が何回あるか」を表示させる関数、或いは方法を知ることでした。 さしでがましいですが、もし、そのような関数か方法があれば、ご教示願えれば有り難いです。

heisenberg
質問者

補足

申し訳ありません。 「お礼欄」で「AC1」としたのは、正しくは、「BC1」です。 宜しくお願い致します。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

VBAがよさそうだけど、ワークシート関数のみで押し切るなら。 1)セルA1に式[=if(A1="○"A1=B1),1,0)]を設定 2)セルB2に式[=if(and(A1="○",A1=B1),A1+1,0)]を設定 3)セルB2をコピーしてセルBB1まで貼り付け。 4)counta関数で2行目が[2]のセルを数える。

heisenberg
質問者

お礼

ご回答、有り難うございます。 実は、わたしの説明不足で、皆さまにはご迷惑をおかけしました。わたしの本意は、「対象行が1行だけではなく、複数行の場合」だったのです。 皆さまのご提案は、対象行が1行だけでしたら完全ですが、複数行では使えませんよね? わたしがしたかった作業は、仮に「×○×××○○××○○×・・・」というような行がA1からBB50までのセルに在った場合、AC1に入力してAC50までドラッグし、「○○」のように、「○が連続する回数が何回あるか」を表示させる関数、或いは方法を知ることでした。 さしでがましいですが、もし、そのような関数か方法があれば、ご教示願えれば有り難いです。

heisenberg
質問者

補足

申し訳ありません。 「お礼欄」で「AC1」としたのは、正しくは、「BC1」です。 宜しくお願い致します。

noname#203218
noname#203218
回答No.2

作業列を作成して良いのでしたら簡単に関数で算出出来ます。 他の関数で作業列が不要な方法があるのかもしれませんが・・・ 2行目に作業列を作成するものとします。 A2式=IF(A1="◯",1,0) B2式=IF(B1="◯",A2+1,0) B2に式入力後BB2までフィルコピー BC1式=MAX(A1:BB1) ご参考まで

heisenberg
質問者

お礼

ご回答、有り難うございます。 実は、わたしの説明不足で、皆さまにはご迷惑をおかけしました。わたしの本意は、「対象行が1行だけではなく、複数行の場合」だったのです。 皆さまのご提案は、対象行が1行だけでしたら完全ですが、複数行では使えませんよね? わたしがしたかった作業は、仮に「×○×××○○××○○×・・・」というような行がA1からBB50までのセルに在った場合、AC1に入力してAC50までドラッグし、「○○」のように、「○が連続する回数が何回あるか」を表示させる関数、或いは方法を知ることでした。 さしでがましいですが、もし、そのような関数か方法があれば、ご教示願えれば有り難いです。

heisenberg
質問者

補足

申し訳ありません。 「お礼欄」で「AC1」としたのは、正しくは、「BC1」です。 宜しくお願い致します。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

処理としては、エクセルVBAを使うような内容だと思います。 既存の関数だけでは無理だと思います。 なので、エクセルVBAの勉強をしてプログラムロジックを考えて、コーディングすることになると思います。 VBAを覚えれば、役に立ちますよ。

heisenberg
質問者

お礼

早速のご回答、有り難うございます。 VBAは、敷居が高そうで、これまで、敬遠していました。 難しそうですね? なお、同じタイトルで別の内容の質問も投稿していますが、投稿した後で、質問するべきことを間違えてしまったことに気がついたのですが、質問を削除する方法が分からず、そのままにしています。 申し訳ありません。

関連するQ&A