- ベストアンサー
エクセル 出席簿作成(1)
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (7)
- bunjii
- ベストアンサー率43% (3589/8249)
>詳しくは添付画像を見ていただけたらと思っています。 提示の一覧が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で検証した結果の画像を添付します。
お礼
お礼が遅くなってすみません。 実際にやってみてできました。 まだまだ勉強不足ですので,参考にさせていただきたいと思います。 ありがとうございました。
- googoo900
- ベストアンサー率44% (82/184)
- googoo900
- ベストアンサー率44% (82/184)
表の作り方が自動集計することを考慮されていないように思います。 簡単に修正しましたので、添付ファイルのようにされることをお勧めします。 ※氏名欄は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です)
》 詳しくは添付画像を見ていただけたらと思っています。 それを見た結果の、下の私の意見が参考になれば幸いです。 貴方は、Excel をこれから始めようとする人か、始めたばかりの超初心者なので、今のところ、当分の間は、その「出席簿」は手書きで作成し続けながら、初心者用の市販の参考本で勉強することをお奨めします。 そうすれば、Excel の得意ワザが分かって、それに見合った「出席簿」に変更したくなるはずです。それから此処で質問するのがよろしいかと。
お礼
おっしゃるとおりです。 もっと勉強したいと思います。 ご示唆,ありがとうございました。
- MackyNo1
- ベストアンサー率53% (1521/2850)
例えば元データが添付画像のように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つのセルを選択し下方向に適当数オートフィルしてください。
お礼
お礼が遅くなってすみません。 実際にやってみてできました。 まだまだ勉強不足ですので,参考にさせていただきたいと思います。 ありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
こんんいちは! お示しの画像のような「一覧」ではなく、↓の画像のような感じで良いのであれば・・・ 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
お礼
いつもありがとうございます。 実際に試してみました。 とっても役立ちました。 ありがとうございました。
- k-josui
- ベストアンサー率24% (3220/13026)
これは無理。 今までの手書きだと思いますが、それをそのままパソコンでやろうとしても無理があります。 そもExcelで頭は3行を1セルの纏めて、その後が3行になっている表など扱いにくいことこの上もありません。 セルの結合は極力避けるのが、Excelを扱う上では大切だと私は思います。 さて、「忌引、出席停止、欠席」をドロップダウンリストから選択すれば、名前、理由が1行で収まります。 http://kokodane.com/kihon17.htm 名前の入力さえ間違わなければ、必要に応じて名前で並べ替えを行えばそのまま一覧表になるでしょう。 欠席理由で並べ替えを行えば、こちらも理由の分析ができます。
お礼
ご回答いただきありがとうございました。
お礼
いつもお世話になっております。 実際にやってみたらできました。 まだまだ勉強不足ですみません。