• ベストアンサー

エクセル 出席簿作成(1)

いつもお世話になっております。 今,エクセルで出席簿を作成しています。 そこで,以下のことができないかと思ってご相談です。 出席停止欄及び忌引欄に情報(欠席日数とその事由)を記入した生徒の名前と,入力した情報(欠席日数とその事由)だけを集約して,自動で一覧に表示できないでしょうか? 詳しくは添付画像を見ていただけたらと思っています。 これができるようになれば,かなり校務が楽になります。 どうか,ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.2

1つのセルに複数の行を一気に入れるのは難しいので、まずは、D1セルに以下の式を入れて、D9セルまで下にドラッグコピーしてみてください。 =IF(MOD(ROW(A1),3)=0,"",IF(C1="","",IF(MOD(ROW(A1),3)=1,A1&" "&B1&C1&CHAR(10),""))) また、1つのセルに複数の行を入れるには、任意のセルに、以下の式を入れてみてください。 =D1&D2&D3&D4&D5&D6&D7&D8&D9

kumamon2013
質問者

お礼

いつもお世話になっております。 実際にやってみたらできました。 まだまだ勉強不足ですみません。

その他の回答 (7)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.8

>詳しくは添付画像を見ていただけたらと思っています。 提示の一覧が1つのセルに複数人の情報を纏めているように見えますが、それは無理な条件です。 一覧と表示されたセルは複数のセルを結合したものとして右側のセルは氏名(生徒名)毎に1つのセルに纏めるのであれば以下の式で良いでしょう。 但し、無欠席の場合は氏名のに表示することになります。 F2=CONCATENATE(OFFSET(A$2,(ROW(A1)-1)*3,0)&" ",IF(OFFSET(A$2,(ROW(A1)-1)*3,2)="","",OFFSET(A$2,(ROW(A1)-1)*3,1)&OFFSET(A$2,(ROW(A1)-1)*3,2)),IF(OFFSET(A$2,(ROW(A1)-1)*3+1,2)="","",OFFSET(A$2,(ROW(A1)-1)*3+1,1)&OFFSET(A$2,(ROW(A1)-1)*3+1,2)),IF(OFFSET(A$2,(ROW(A1)-1)*3+2,2)="","",OFFSET(A$2,(ROW(A1)-1)*3+2,1)&OFFSET(A$2,(ROW(A1)-1)*3+2,2))) Excel 2013で検証した結果の画像を添付します。

kumamon2013
質問者

お礼

お礼が遅くなってすみません。 実際にやってみてできました。 まだまだ勉強不足ですので,参考にさせていただきたいと思います。 ありがとうございました。

  • googoo900
  • ベストアンサー率44% (82/184)
回答No.7

No.6です。 画像が見えないですね。 拡大版を貼りなおしました。

kumamon2013
質問者

お礼

お礼が遅くなってすみません。 実際にやってみてできました。 まだまだ勉強不足ですので,参考にさせていただきたいと思います。 2回もご回答いただき本当にありがとうございました。

  • googoo900
  • ベストアンサー率44% (82/184)
回答No.6

表の作り方が自動集計することを考慮されていないように思います。 簡単に修正しましたので、添付ファイルのようにされることをお勧めします。 ※氏名欄はA4~A6セルのように、3行をひとくくりに結合しておいてください。 ■ポイントは、下記のとおりです。 ・欠席日数(数値)と内容(文字)を異なるセルに分けて入力する ・数値を関数(式)で集計 ・フィルター機能を使って休んだひとのみを抽出 ■手順 1. 添付画像のように表を修正してみてください。 2. 数式は画面上に表示されませんので、C4セルに『=SUM(D4:I4)』を入力してください。 3. C4セルをコピー 4. C5~C12セルに、『形式を選択して貼り付け』-『数式』 で貼りつけ 5. 第3行を選択 6. 『データ』-『フィルタ』をクリック 7. C3セルの▼マークをクリック 8. すべての項目にチェックがついていますので、0(ゼロ)のチェックのみをはずしてOKをクリック ■全項目に表示に戻すとき 9. C3セルの▼マークをクリック 10. 『すべて表示』をクリックしてOKクリック ※フィルターは残しておいてください。(その都度消す必要はありません) ■補足 手順を細かく区切って書いたので、やることが多いように見えますが簡単にできると思います。 内容欄(欠席理由)に数字のみを入力するとカウントされますのでご注意。(数字と文字が混在して入ればOKです)

noname#204879
noname#204879
回答No.5

》 詳しくは添付画像を見ていただけたらと思っています。 それを見た結果の、下の私の意見が参考になれば幸いです。 貴方は、Excel をこれから始めようとする人か、始めたばかりの超初心者なので、今のところ、当分の間は、その「出席簿」は手書きで作成し続けながら、初心者用の市販の参考本で勉強することをお奨めします。 そうすれば、Excel の得意ワザが分かって、それに見合った「出席簿」に変更したくなるはずです。それから此処で質問するのがよろしいかと。

kumamon2013
質問者

お礼

おっしゃるとおりです。 もっと勉強したいと思います。 ご示唆,ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

例えば元データが添付画像のように1行目が項目名で2行目からデータが入力されているなら、以下の関数で該当データを抽出することができます(添付画像参照)。 F2セル =INDEX(A:A,FLOOR(SMALL(INDEX(($B$2:$B$200="欠席")+($C$2:$C$200="")*1000+ROW($2:$200),),ROW(1:1))+1,3)-1)&"" G2セル(右方向に1つオートフィル) =IF($F2="","",INDEX(B:B,SMALL(INDEX(($B$2:$B$200="欠席")+($C$2:$C$200="")*1000+ROW($2:$200),),ROW(1:1)))&"") 上記3つのセルを選択し下方向に適当数オートフィルしてください。

kumamon2013
質問者

お礼

お礼が遅くなってすみません。 実際にやってみてできました。 まだまだ勉強不足ですので,参考にさせていただきたいと思います。 ありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんんいちは! お示しの画像のような「一覧」ではなく、↓の画像のような感じで良いのであれば・・・ VBAになってしまいますが、一例です。 上側がSheet1で下側のSheet2に表示するとします。 尚、Sheet1の1行目は項目行になっている前提です。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面(カーソルが点滅しているところ) に↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, lastRow As Long, cnt As Long Dim c As Range, wS As Worksheet Set wS = Worksheets("Sheet2") wS.Cells.ClearContents With Worksheets("Sheet1") .Range("A1").Copy wS.Range("A1") .Range("C1").Copy wS.Range("B1") lastRow = .Cells(Rows.Count, "B").End(xlUp).Row .Range("A:A").Insert With Range(.Cells(2, "A"), .Cells(lastRow, "A")) .Formula = "=IF(B2="""",A1,B2)" .Value = .Value End With For i = 2 To lastRow If .Cells(i, "C") = "忌引" Or .Cells(i, "C") = "出席停止" Then If .Cells(i, "D") <> "" Then Set c = wS.Range("A:A").Find(what:=.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If c Is Nothing Then cnt = wS.Cells(Rows.Count, "A").End(xlUp).Row + 1 wS.Cells(cnt, "A") = .Cells(i, "A") wS.Cells(cnt, "B") = .Cells(i, "D") Else cnt = c.Row wS.Cells(cnt, "B") = wS.Cells(cnt, "B") & " " & .Cells(i, "D") End If End If End If Next i .Range("A:A").Delete End With wS.Columns.AutoFit End Sub 'この行まで ※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。m(_ _)m

kumamon2013
質問者

お礼

いつもありがとうございます。 実際に試してみました。 とっても役立ちました。 ありがとうございました。

  • k-josui
  • ベストアンサー率24% (3220/13026)
回答No.1

これは無理。 今までの手書きだと思いますが、それをそのままパソコンでやろうとしても無理があります。 そもExcelで頭は3行を1セルの纏めて、その後が3行になっている表など扱いにくいことこの上もありません。 セルの結合は極力避けるのが、Excelを扱う上では大切だと私は思います。     さて、「忌引、出席停止、欠席」をドロップダウンリストから選択すれば、名前、理由が1行で収まります。 http://kokodane.com/kihon17.htm      名前の入力さえ間違わなければ、必要に応じて名前で並べ替えを行えばそのまま一覧表になるでしょう。 欠席理由で並べ替えを行えば、こちらも理由の分析ができます。

kumamon2013
質問者

お礼

ご回答いただきありがとうございました。

関連するQ&A