• 締切済み

空白セルで区切られた文字列の種類を求める関数

以下の条件を満たす excel関数がありましたら 教えてください。    A       B 1 りんご 2 みかん 3 りんご 4 なし 5 なし      3 ← 結果 6 7 なし 8 りんご 9 りんご     2 ← 結果 10 上記のようにA1からA10のセルに 文字列と空白が入っているとき、 空白で区切られたグループ内で、 文字列の種類が一体何種類になるのかを、 数えたいと思います。 ちなみに、関数はB列に入力したいのですが、 空白の一つ上のセルにだけ結果がでるように 表示させたいです。 説明不足でしたら申し訳ありません。 よろしくお願いいたします。

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 回答No.1です。  表のレイアウトが回答No.1と同様なものであるとして、B2セルに入力する関数を次の様なものにしますと、作業列を用いる事無く、結果を表示する事が出来ます。 =IF(AND(INDEX($A:$A,ROW())<>"",INDEX($A:$A,ROW()+1)=""),SUMPRODUCT(ISNUMBER(ROW(INDEX($A$1:$A2,IF(COUNT(B$1:B1),MATCH(9E+307,B$1:B1)+2,2)):INDEX($A:$A,ROW())))*(COUNTIF(OFFSET($A$1,IF(COUNT(B$1:B1),MATCH(9E+307,B$1:B1)+1,1),,ROW(INDEX($A$1:$A2,IF(COUNT(B$1:B1),MATCH(9E+307,B$1:B1)+2,2)):INDEX($A:$A,ROW()))-IF(COUNT(B$1:B1),MATCH(9E+307,B$1:B1),0)-ROW($A$1)),INDEX($A$1:$A2,IF(COUNT(B$1:B1),MATCH(9E+307,B$1:B1)+2,2)):INDEX($A:$A,ROW()))=1)),"")

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

>上記のようにA1からA10のセルに文字列と空白が入っているとき との事ですが、私が考えた方法では、1行目からデータが入力されていた場合、計算処理が面倒になりますので、今仮に、     A       B 1  文字列   カウント数 2  りんご 3  みかん 4  りんご 5  なし 6  なし        3 ← 結果 7 8  なし 9  りんご 10 りんご       2 ← 結果 11 の様に、1列目は項目名が入力されていて、実際のデータはA2以下に入力されているものとします。  又、上記の元データが入力されているシートのシート名がSheet1であるものとし、Sheet2のA列~B列を作業列として使用するものとします。  まず、Sheet2のA2セルに次の関数を入力して下さい。 =IF(ROW()=ROW(Sheet1!$A$1)+1,ROW(),IF(AND(INDEX(Sheet1!$A:$A,ROW())<>"",INDEX(Sheet1!$A:$A,ROW()-1)=""),ROW(),""))  次に、Sheet2のB2セルに次の関数を入力して下さい。 =IF(INDEX(Sheet1!$A:$A,ROW())="","",IF(COUNT($A$1:$A2),IF(COUNTIF(INDEX(Sheet1!$A:$A,LOOKUP(9E+99,$A$1:$A2)):INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW()))=1,1,""),""))  次に、Sheet2のA2~B2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  次に、Sheet1のB2セルに次の関数を入力して下さい。 =IF(AND(INDEX($A:$A,ROW())<>"",INDEX($A:$A,ROW()+1)=""),SUM(INDEX(Sheet2!$B:$B,LOOKUP(9E+99,Sheet2!$A$1:INDEX(Sheet2!$A:$A,ROW()))):INDEX(Sheet2!$B:$B,ROW())),"")  次に、Sheet1のB2セルをコピーして、Sheet1のB3以下に貼り付けて下さい。  以上です。

関連するQ&A

専門家に質問してみよう