1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Excelで、セル内の要素の数をかぞえる

Posted at

背景

たくさんのグループについて、そのメンバーを調べる作業がありました。グループごとのメンバー数は全くバラバラで、多くのグループによく出現するメンバーとその他のメンバーがたくさん、という感じでした。

Office しか入っていないような PC しか作業には使えない状況でした。

当初:主なメンバーのみの集計

主なメンバーの出現回数だけの集計でよいので、その他メンバーは適当に済まします。

Excel で 1 行に 1 グループずつ記録していきます。A 列にはグループ名を、続いて主なメンバー名ごとの列を作って「o」「x」を、その他メンバーは次の列に名前を列挙しました。
できあがった表はこんな感じ。

A B C D E
グループ メンバー1 メンバー2 メンバー3 その他メンバー
AAA x m1, m2, m3
BBB x m3, m4
CCC
DDD x m1, m4, m5
EEE x x m2, m3, m5, m6, m8

メンバー 1 の出現回数は、Excel関数 =COUNTIF(B3:B100,"○") で数えられます。
すべての主なメンバーの出現回数は、それらの sum() です。

予定変更:全てのメンバーを集計

ところが、その他のメンバーの全数も必要になりました。
幸い、その他メンバーを個別に集計する必要はありませんでした。
ですが、セル内に列挙してあるメンバーの出現回数を数えなければいけません。

その他メンバーを 1 個ずつセルに分けてあれば COUNTA(範囲) で数えられますが、そのようにはなっていません。「データ」→「区切り位置」コマンドを使えばメンバーごとにセルをばらせるようですが、このときは知りませんでした。
VBA なら Split()UBound() で調べられますが、マクロを実行したときにしか数えられません。
Excel 関数で実現できないかと思い、文字列操作関数を調べたのですが、`Split()' に相当する関数はありません。

なんとかひねり出したのが次の式でした。

=LEN(E3)-LEN(SUBSTITUTE(E3,",",""))+1

, を全て削除した後の文字列の長さを元の文字列の長さから引けば、, の個数が数えられます。メンバーの数は , より1個多いので '+1` します。これで列挙したメンバーの数が数えられます。
その他メンバーが全くいないグループもあるので、式を少し直します。

=IF(E3="",0,LEN(E3)-LEN(SUBSTITUTE(E3,",",""))+1)

これを sum() で足し算すれば、その他メンバーの全数がわかります。

おわりに

人間が見やすいように表を作ると、機械的な集計はしづらくなる、という話でした。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?