- ベストアンサー
エクセルでアンケート結果を個人毎に集計する方法
- エクセルの研修報告書を集計する際に、個人毎に受講した研修を抽出する方法を紹介します。
- エクセル2003を使用して、月毎に受講者の研修結果をまとめるシートを作成することができます。
- 受講者の氏名、研修名、受講日、評価をまとめたリストを作成することで、各個人が受講した研修を把握することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>ひと月毎に1シートで下記のように作っています。 よく見かけるパターンですが、最初の入力が間違っています。 データは、一枚のシートにひたすら下方向へ入力していきます。 月単位のデータが必要であれば、オートフィルターで絞り込みもできます。 並び替えを使えば、指名順にも並び替えが出来ます。 応用した手法を使えば 別シートを準備して、 セルに 年 と月 をいれると その下にその月の一覧が出るようなシートが出来ます。 つまりシートは2枚で現状が克服できます。 同じテクニックを使えば 別シートのセルに 名前を入れれば、その方のリストの一覧を表示するシートを 考えます。 作業を楽にする為には、別シートに受講者氏名一覧表を作って入力規則を設定すればよいでしょう。 シートの構成は 受講者氏名のシート 受講履歴のデータシート 月別データ抽出のシート 氏名別データ抽出のシート といった具合のシート構成で考え直してみてください。 データ入力から分析までが簡単に出来るファイルになります。
その他の回答 (2)
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、 1月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「1月」という名称のシートのA1セルであり、 2月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「2月」という名称のシートのA1セルであり、 3月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「3月」という名称のシートのA1セルであり、 4月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「4月」という名称のシートのA1セルであり、 5月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「5月」という名称のシートのA1セルであり、 6月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「6月」という名称のシートのA1セルであり、 7月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「7月」という名称のシートのA1セルであり、 8月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「8月」という名称のシートのA1セルであり、 9月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「9月」という名称のシートのA1セルであり、 10月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「10月」という名称のシートのA1セルであり、 11月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「11月」という名称のシートのA1セルであり、 12月分のデータを入力する表の内、「研修名」という項目名が入力されているセルが、「12月」という名称のシートのA1セルであり、 各個人がどの研修を受講したかというリストを、「集計」という名称のシートに表示させるものとします。 又、「補助」という名称のシートに、作業列を設けるものとします。 まず、補助シートの A2セルに 1月 A3セルに 2月 A4セルに 3月 A5セルに 4月 A6セルに 5月 A7セルに 6月 A8セルに 7月 A9セルに 8月 A10セルに 9月 A11セルに 10月 A12セルに 11月 A13セルに 12月 という具合に、各元データのシートのシート名を順番に入力して下さい。 次に、補助シートのB2セルに数値の0を入力して下さい。 次に、補助シートのB2セルに次の数式を入力して下さい。 =IF(ROW()>MATCH("゛",$A:$A,-1),"",MAX(B$1:B1)+IF(ISNUMBER(1/(COUNT(INDIRECT("'"&INDEX($A:$A,ROW())&"'!C:C")))),MATCH(9^9,INDIRECT("'"&INDEX($A:$A,ROW())&"'!C:C")),0)) 次に、補助シートのB2セルをコピーして、補助シートのB3~B13の範囲に貼り付けて下さい。 次に、補助シートのI1セルに次の数式を入力して下さい。 =IF(ISERROR(1/(INDIRECT("'"&INDEX($A:$A,MATCH(ROW()-1,$B:$B)+1)&"'!R"&ROW()-VLOOKUP(ROW()-1,$B:$B,1)&"C"&COLUMNS($I:I),FALSE)<>"")),"",INDIRECT("'"&INDEX($A:$A,MATCH(ROW()-1,$B:$B)+1)&"'!R"&ROW()-VLOOKUP(ROW()-1,$B:$B,1)&"C"&COLUMNS($I:I),FALSE)) 次に、補助シートのI1セルをコピーして、補助シートのJ1~M1の範囲に貼り付けて下さい。 次に、補助シートのG1セルに次の数式を入力して下さい。 =IF(AND($J1<>"",COUNTIF($J$1:$J1,$J1)=1,ISNUMBER($K1)),ROW(),"") 次に、補助シートのH1セルに次の数式を入力して下さい。 =IF(AND($J1<>"",COUNTIF($J$1:$J1,$J1)=1,ISNUMBER($K1)),ROW(),"") 次に、補助シートのG1~M1の範囲をコピーして、同じ列の2行目以下に、1月~12月までの表の行数の合計を上回るのに充分な行数となるまで、貼り付けて下さい。 次に、補助シートのE1セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>COUNT($G:$G),"",INDEX($J:$J,SMALL($G:$G,ROWS($2:2)))) 次に、補助シートのD1セルに数値の0を入力して下さい。 次に、補助シートのD2セルに次の数式を入力して下さい。 =IF($E2="","",MAX(D$1:D1)+COUNTIF($J:$J,$E1)) 次に、補助シートのE1セルをコピーして、補助シートのE2セルに貼り付けて下さい。 次に、補助シートのD2~E2の範囲をコピーして、同じ列の3行目以下に、受講者の人数分だけ貼り付けて下さい。 次に、集計シートのA1セルに次の数式を入力して下さい。 =IF(ROWS($2:2)>MAX(補助!$D:$D),"",VLOOKUP(VLOOKUP(ROWS($2:2)-1,補助!$D:$E,2)&"-"&ROWS($2:2)-VLOOKUP(ROWS($2:2)-1,補助!$D:$D,1),補助!$H:$M,COLUMNS($A:A)+1,FALSE)) 次に、集計シートのA1セルをコピーして、集計シートのB1~E1の範囲に貼り付けて下さい。 次に、集計シートのC1セルの書式設定の表示形式を[日付]として下さい。 次に、集計シートのA1~E1の範囲をコピーして、同じ列の2行目以下に、1月~12月までの表の行数の合計を上回るのに充分な行数となるまで、貼り付けて下さい。 以上です。
お礼
詳細に説明頂きありがとうございます! 手順に従って試してみます。 回答ありがとうございました。
- MackyNo1
- ベストアンサー率53% (1521/2850)
研修結果シートで「データ」「並べ替え」で「氏名」で昇順に並べ替えます。 (必要に応じてさらに、オートフィルタなどを利用してデータを絞り込みます) このようにして名前順に並べ替えたシートのセル範囲を選択して、右クリック「コピー」、データ表示シートで右クリック「貼り付け」します。 最後に、「報告書提出」の列を選択して右クリック「削除」、「名前」の列を選択して選択範囲の周囲(左または右)にカーソルを置いてShiftキーを押しながらA列の左にドラッグして列を入れ替えれば完成です。
お礼
皆さんの色々な方法は参考になります。 回答、ありがとうございました!
補足
回答ありがとうございます。 データ入力、一枚のシートに下方向に入力をしてみました。 確かにオートフィルター、並べ替えで必要なデータがとれますね! と、ここまでは理解したのですが、応用の部分がわかりません。 >応用した手法を使えば >別シートを準備して、 セルに 年 と月 をいれると >その下にその月の一覧が出るようなシートが出来ます。 >つまりシートは2枚で現状が克服できます。 別シートのセルに年と月を入れる、というのは具体的にどのように するのでしょうか? もう少し詳細を教えて頂けますか? 応用がきかず申し訳ありませんが、宜しくお願い致します。