- 締切済み
一文の中に名簿中の名前がいくつあるか
WINDOWS7、エクセル2003です。 A B C D E 1 山田、伊東風邪。山本ノロウィルス。 青田 3 2 山田 3 上田 4 伊東 5 山本 上の表のように、A列には短文が入っていて、何人かの名前が記入されています(文があっても名前なしの時もあります)。 D列には、最大30人の名前が記入されています。 A列の短文の中に、D列の名前が何人出現しているか、人数をE列に返したい。 朝から調べましたが分かりませんでした。SUMPRODUCTとかCOUNTIFを使うのだろうとは見当がつきましたがよく分かりません。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
- keithin
- ベストアンサー率66% (5278/7941)
SUMPRODUCTはイマイチどうでもよくて、中で何を計算するかでやり口は様々あります。 =SUMPRODUCT(COUNTIF(A1,"*"&D1:D30&"*")*(D1:D30<>"")) とか =SUMPRODUCT(1*(SUBSTITUTE(A1,D1:D30,"")<>A1)) とか =COUNT(0/FIND(IF(D1:D30<>"",D1:D30),A1)) をCtrl+Shift+Enter とか >式の理解に苦しみましたが、本やネットを動員してなんとかわかってきました。 ツールメニューのワークシート分析の中にある「数式の検証」という機能を利用します。 ただしこれは、まず最初は「正しく動作する事が分かっているお手本の数式」を理解するのに使います。 計算ステップが「どうしてこういう具合に進むのか、なぜそうなるのか」正しく理解できたら、次のステップとして新しい数式を工夫するのにも利用する事ができるようになります。
- bunjii
- ベストアンサー率43% (3589/8249)
>SUMPRODUCTとかCOUNTIFを使うのだろうとは見当がつきましたがよく分かりません。 SUMPRODUCT関数については既に回答が出ていますので割愛します。 COUNTIF関数では条件を設定することが困難となります。 代わりにIF関数で配列値処理すればCOUNT関数で計数できます。 =COUNT(IF(FIND(B2:B31,A1)*ISTEXT(B2:B31),1,"")) また、SUM関数では配列値を工夫して計数できます。 =SUM(NOT(ISERR(FIND(B2:B31,A1)))*ISTEXT(B2:B31)) 上記の式は配列値を扱いますので数式バーへ入力後、Ctrl+Shift+Enterで確定してください。
お礼
bunjii様 ありがとうございました。 一つの目的に対して、いろいろな解決法があることがわかりました。 式の理解に時間がかかりましたが、なんとかわかってきました。 勉強になりました。
- keithin
- ベストアンサー率66% (5278/7941)
=SUMPRODUCT(ISNUMBER(FIND(D2:D31,A1))*(D2:D31<>"")) みたいな。
お礼
keithin様 ありがとうございました。 さっそく入力したところ、見事に解決してすっきりしました。 もっとも、式の理解に苦しみましたが、本やネットを動員してなんとかわかってきました。
お礼
MarcoRossiItaly 様 お礼が遅くなりました。 画像付きで、しかも同一人物が複数回出た時に1人とカウントする場合と延べでカウントする場合と両方教えて頂きました。 役に立ちます。 ありがとうございました。