何種類のデータが入力されているかを数えて1つのセルにまとめる

重複したデータを省いて、記号や名前を1つのセルにまとめたいときに使える方法を紹介します。

全てのデータをひとつのセルにまとめて表示する

送信者 OpenOffice
この画面のファイルは、SKYDRIVEからcalc105.odsをダウンロードしていただき、左下ののタブをクリックしてください。

上の表では、A列にデータが並んでいて、重複して登場するものもあります。
B列には、新しいものが登場するごとにセルに書き加え、重複の場合は、1つ上のデータをそのまま転用しています。
但し、一行目は自動的に新しいデータということになるのでA1セルのデータがそのまま転用されます。
2行目以降に入力する数式は
=IF(COUNTIF($A$1:A2;A2)=1;CONCATENATE(B1;" ";A2);B1)です。

まず、COUNTIF関数を用いて条件付きでデータの個数を数えます。
=COUNTIF($A$1:A2;A2)
条件は、$A$1:A2の範囲内A2セルと同じデータが何回あるかということです。
数える起点のセルは、A1セルに絶対参照で固定してしまいます。終点のセルは1つずつ下に下げていきます。
ここで、該当の行より上に登場しなかければ、1が返されます。

そのとき、CONCATENATE関数で、B列の1つ上の行のデータと該当行のA列のデータを結合します。
このとき、データの間に空白を入れると見やすいので、空白を挿入します
=CONCATENATE(B1;" ";A2)

もしもCOUNTIF関数で返される値が1でない場合、B1のデータをそのまま返します。
B2セルの数式をそのままB21セルまで貼り付けると登場する文字が全て一回ずつ表示されることになります。



何種類のデータが登場しているかを数える

LEN関数で一番下の行のセル(ここではB21)の文字の数を数えます。
正し、上の作業で空白を挿入したので空白を省く必要があります。そこで
SUBSTITUTE関数で、半角の空白消してしまいます。
=SUBSTITUTE(B21;" ";"")
これをLEN関数に当てはめると、
=LEN(SUBSTITUTE(B21;" ";""))で上の例の場合、17文字であることが分かります。

文字の数が一定でないときの初登場データの個数の数え方

最初の例では、1つのデータが一文字ずつでしたので、LEN関数で簡単に数えることができました。
しかし、下の場合は、同じように数えることができません。
送信者 OpenOffice
この画面のファイルは、SKYDRIVEからcalc105.odsをダウンロードしていただき、左下ののタブをクリックしてください。

1つのセルに入力されているデータは、2文字であったり、1文字であったり、3文字であったり。
この場合、SUMPRODUCT関数を使うと簡単に数えることができます。
この画像の例ではNOT(B2:B17=B1:B16)と、参照するセルの行を1つ、ずらしています。これにより、1つ上のセルが同じデータでないことを条件にして、1ずつ加えられていくことになります。
但し、この場合一番上のセルは計算の対象外になりますので、1を別途加えることになります。
この方法は、一文字ずつの場合でももちろん可能です。

参考記事
CONCATENATE関数について
LEN関数について
SUMPRODUCT関数について


この記事をクリップ!