• ベストアンサー

Excel 特定の文字列間のセルの個数を数える方法

Excelの関数を用いて以下のような処理は可能でしょうか。 A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U| A|B|C|B|C|A|C|A|B|B|C|A|B|B|B|C|A|C|B|A|3| セルA1からT1にはA,B,Cどれかの文字列が入っています。Aの文字列と次に現れるAの文字列との間にセルが3個以上あれば、U1のセルにその現れる回数が表示される。(上記の場合"3") このようなことが、関数だけでできるでしょうか。 もしできるようでしたらそのやり方をご教授ください。 よろしくお願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

VBAを使って、ユーザー定義関数を作れば簡単ですが、ワークシート関数だけを使うと下のようになりました。 作業用のセルを使っています。 セルV1 に探したい文字列を入力するとして、(例えばA) セルE2:=IF(AND(COUNTIF($A$1:E1,$V$1)-COUNTIF($A$1:A1,$V$1)=1,COUNTIF($A$1:A1,$V$1)>0,E1=$V$1),1,0) とし、セルT2までコピーします。 セルU1:=SUM(A2:T2) A1:D1 はカウント対象外で、E1より右に対して、新たに探したい文字列が出てきたら、そのセルの4つ左までの探したい文字列の個数をカウントし、1つ少ないことを要件にしています。

wannaknow
質問者

お礼

ありがとうございます。なるほど、作業用に別のセルを利用すればいいんですね。目から鱗です。これでなんとかできそうです。

その他の回答 (2)

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.3

◆関数による方法です U3=SUMPRODUCT(N(FREQUENCY(IF((A1:T1<>"A")*(A1:T1<>""),COLUMN(A1:T1)),IF((A1:T1="A")+(A1:T1=""),COLUMN(A1:T1)))>=3)) ★この式は「配列数式」です。式を入力後、Ctrl+Shift+Enter をおして、式を確定させてください。 ★確定すると、式の両端に{ }がつきます。

wannaknow
質問者

お礼

SUMPRODUCTなんて関数初めてみました...Excelは奥が深いですね。おかげで何とかなりそうです。ありがとうございました。

  • Kazamin
  • ベストアンサー率30% (17/56)
回答No.1

関数だけで実現できました。 しかし、U3セルだけに式を埋め込んで実現するのは不可能では ないと思いますが、とても難しいと思います。 私の場合は、別のセルにA1~T1セルを&演算子で結合した文字列を 作り、それに対してFIND関数を使って、"A"の文字列がある位置を 探しました。そしてそれぞれの位置の差を取り、3以上のものの カウントを取りました。

wannaknow
質問者

補足

回答ありがとうございます。Kazaminさんのおっしゃるように、別のセルも使ってやれば実現可能のような気がしてきました。 私の説明がまずかったので補足します。セルにはABCどれかの文字列だけでなく、空白セルが入っている場合があります。そのような場合はどうするのが簡単でしょうか。文字列を結合するだけだと空白セルはカウントされませんよね? また、説明を簡単にするために文字列にABCを使いましたが、実際には一つのセルに3~4文字程度の文字列が入ります。

関連するQ&A