御使いのExcelのバージョンがExcel2007以降であれば、次の様な数式をD2セルに入力してから、D2セルをコピーして、D3以下に貼り付けて下さい。
=IF($B2="","",REPLACE(IF(COUNTIFS($B:$B,$B2,$C:$C,"英語"),"・英語","")&IF(COUNTIFS($B:$B,$B2,$C:$C,"算数"),"・算数","")&IF(COUNTIFS($B:$B,$B2,$C:$C,"国語"),"・国語","")&IF(COUNTIFS($B:$B,$B2,$C:$C,"理科"),"・理科","")&IF(COUNTIFS($B:$B,$B2,$C:$C,"社会"),"・社会","")&IF(COUNTIF($B:$B,$B2)=1,"のみ",""),1,1,))
又、Excel2007よりも前のバージョンで、同じ事を行う場合には、次の様な数式となります。
=IF($B2="","",REPLACE(IF(SUMPRODUCT(($B$1:INDEX($B:$B,MATCH("゛",$B:$B,-1))=$B2)*($C$1:INDEX($C:$C,MATCH("゛",$B:$B,-1))="英語")),"・英語","")&IF(SUMPRODUCT(($B$1:INDEX($B:$B,MATCH("゛",$B:$B,-1))=$B2)*($C$1:INDEX($C:$C,MATCH("゛",$B:$B,-1))="算数")),"・算数","")&IF(SUMPRODUCT(($B$1:INDEX($B:$B,MATCH("゛",$B:$B,-1))=$B2)*($C$1:INDEX($C:$C,MATCH("゛",$B:$B,-1))="国語")),"・国語","")&IF(SUMPRODUCT(($B$1:INDEX($B:$B,MATCH("゛",$B:$B,-1))=$B2)*($C$1:INDEX($C:$C,MATCH("゛",$B:$B,-1))="理科")),"・理科","")&IF(SUMPRODUCT(($B$1:INDEX($B:$B,MATCH("゛",$B:$B,-1))=$B2)*($C$1:INDEX($C:$C,MATCH("゛",$B:$B,-1))="社会")),"・社会","")&IF(COUNTIF($B:$B,$B2)=1,"のみ",""),1,1,))
只、2番目に挙げた数式やANo.1様の数式の様に、SUMPRODUCT関数を使用した方法の場合、表の行数があまり多くなると計算に時間が掛かる様になります。
ですから、計算に要する時間が長くなり過ぎる様な場合には、対策して作業列を使用する方法もあります。
今仮に、元データが入力されているシートがSheet1で、Sheet2のA列を作業列として使用するものとします。
まず、Sheet2のA2セルに次の数式を入力して下さい。
=Sheet1!$B2&Sheet1!$C2
次に、Sheet2のA2セルをコピーして、Sheet2のA3以下に貼り付けて下さい。
次に、Sheet1のD2セルに次の数式を入力して下さい。
=IF($B2="","",REPLACE(IF(COUNTIF(Sheet2!$A:$A,$B2&"英語"),"・英語","")&IF(COUNTIF(Sheet2!$A:$A,$B2&"算数"),"・算数","")&IF(COUNTIF(Sheet2!$A:$A,$B2&"国語"),"・国語","")&IF(COUNTIF(Sheet2!$A:$A,$B2&"理科"),"・理科","")&IF(COUNTIF(Sheet2!$A:$A,$B2&"社会"),"・社会","")&IF(COUNTIF($B:$B,$B2)=1,"のみ",""),1,1,))
次に、Sheet1のD2セルをコピーして、Sheet1のD3以下に貼り付けて下さい。
以上です。
お礼
ありがとうございます。 おっしゃる通り、私の勉強不足です。 いろいろな事情があり、同僚が泣いているのに下手な同情心をおこし、 10年前にちょっとだけかじったエクセルで手伝ってみたのです。 私がやってあげられないというのは、 彼女の担当の仕事なので、 私がまるまるその作表を出すわけには、 時間的にも立場的にも難しいという意味なのです。 要するに、月に2回、在籍簿を作成する仕事なのですが、 元のデータを会社の専用システムからコピーしてエクセルに貼って、 それで作成しろという上からの命令なのです。 元データはCG列×400行位まである大きなテーブルになっていて、 そこから毎回必要項目だけ抽出するのは、 抜き出し間違えたり貼り間違えたり、書式を消してしまったりで、 ひどく大変と同僚が泣いていたのです。 そこで、私の無い知恵を絞って、 とにかく全部コピーして、全部貼り付けたら、 あらかじめ作成しておいた雛形の表に保護をかけたシートに、 必要項目が割り振られて入って、印刷するだけで完成する様にまではしたのですが、 最後の要望のこの作業だけが、 私のつたないエクセルの知識では解決できなかったのです。 一時はIFとCOUNTIFを使って重複を出し、 重複3つなら下の行二つの該当内容を&でつないで表示させてみたりしたのですが、 当然、重複なしの1つだけの場合か、重複していても一番上の行ならいいのですが、 次の行からは関係ない下の行のほかの人のデータを拾ってしまうし・・・と、 我ながら煮詰まって、バカなことをしてしまったり・・・。 VBA、難しそうですが、 もういちど、エクセルやアクセスも含め、じっくり勉強してみたくなりました。 本当にありがとうございます。 >利用者が不慣れであればあるほど、VBAなどで面倒を見ないとならない。 なるほど・・・です。素直にありがとうございます。 私なんか・・・と思ってエクセルとアクセスを生半可にかじったままにしていましたが、 この一言、VBA勉強してみようかなという意欲がわいてきました。