プロが教えるわが家の防犯対策術!

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")
このようなことが、関数だけでできるでしょうか。
もしできるようでしたらそのやり方をご教授ください。
よろしくお願いします。

A 回答 (3件)

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つ少ないことを要件にしています。
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/03/28 23:30

◆関数による方法です


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 をおして、式を確定させてください。
★確定すると、式の両端に{ }がつきます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/28 23:31

関数だけで実現できました。


しかし、U3セルだけに式を埋め込んで実現するのは不可能では
ないと思いますが、とても難しいと思います。

私の場合は、別のセルにA1~T1セルを&演算子で結合した文字列を
作り、それに対してFIND関数を使って、"A"の文字列がある位置を
探しました。そしてそれぞれの位置の差を取り、3以上のものの
カウントを取りました。

この回答への補足

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

補足日時:2007/03/28 01:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!