- ベストアンサー
エクセルで出勤表を作成したいが困っています
- エクセルで出勤表を作成する方法について困っています。シート1には70人の名前が縦軸に入力されており、横軸には31日分の日にちが書かれています。日にちと名前が合うセルに出勤時間を入力し、シート2に自動的に反映されるようにしたいのですが、うまくできません。
- 出勤表を作成するためにエクセルを使用していますが、シート1には70人の名前が縦軸に入力されており、横軸には31日分の日にちが書かれています。日にちと名前が合うセルに出勤時間を入力すると、シート2に自動的に反映されるようにしたいのですが、どうしてもうまくいきません。
- エクセルで出勤表を作成する方法に困っています。シート1には70人の名前が縦軸に入力されており、横軸には31日分の日にちが書かれています。日にちと名前が合うセルに出勤時間を入力し、シート2に反映させる方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
まず、確認しておきたい事が御座いますが、質問者様が御使いになられているExcelのバージョンは、どのバージョンなのでしょうか? ExcelはExcel2007から仕様が変更になりましたので、Excel2007以降のバージョンと、それよりも前のバージョンでは、幾つかの機能や操作方法が異なっていますから、バージョンによって回答すべき内容が異なってくる場合もあるのです。 ですから、今回に限らず、今後もExcelに関する御質問を投稿される際には、なるべく使用するExcelのバージョンを併記して戴く様、御願い致します。 尚、Excelのバージョンの確認方法に関しましては、以下の参考URLのページを御覧下さい。 【参考URL】 エクセルのバージョン確認方法 http://www.field-play.com/excel/ver 121ware.com > サービス&サポート > Q&A > Q&A番号 012146 http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=012146 それから、仕事でエクセルを御使いになられるのでしたら、初心者である事に甘えている訳にはいかないと思います。 ですから、Excelの参考書の中でも画像付きの例題が掲載されていて、且つ解り易そうなものを購入された上で、御自宅でExcelの練習をされて、エクセルの基本的な操作方法程度は身に付ける様にされる事を御勧め致します。(実際に操作してみながら覚える様にされなければ、身に付けるのは難しいかと思います) 尚、前述の様に、Excelはバージョンによっては操作方法が異なる場合もありますから、参考書を選ぶ際には、なるべく御使いになられるExcelのバージョンに合ったものを選ぶ様になさって下さい。 それから、参考書に関しましては、条件に合ったものがあれば、図書館で借りて来るという方法も御座います。 又、操作方法に関しましては、以下のサイト等が解説が解り易くて参考になるかと思います。 【参考URL】 よねさんのWordとExcelの小部屋 http://www.eurus.dti.ne.jp/~yoneyama/ >1日のシートでB1に関数をいれてユーザ設定をすると日にちがでるんですよね? >まずそれがでなくて困っています。 若しかしますと、ANo.1で述べました >1日の出勤状況を表示するシートのシート名を「Sheet2」から「1日」に変更し、 >2日の出勤状況を表示するシートのシート名を「Sheet3」から「2日」に変更し、 >3日の出勤状況を表示するシートのシート名を「Sheet4」から「3日」に変更し、 > ・ > ・ > ・ > ・ > ・ >31日の出勤状況を表示するシートのシート名を「Sheet32」から「31日」に変更するものとします。 という操作も未だ行ってはおられないのでしょうか? 1日シートのB1セルの関数はシート名を利用して日付を決める関数ですので、シート名が「『1~31の整数』+『日』」の形式となっていない場合には日付は表示されません。 ですから、もし、「1日のシート」のシート名が、未だ「『1~31の整数』+『日』」の形式となっていない場合には、シート名を「1日」(鉤括弧は不要)に変更して下さい。 因みに、Excelウインドウの下部にあるワークシート見出しにシート名が表示されていますが、そのシート名をダブルクリックしますと、シート名を書き換える事が出来る様になります。(若しくは、シート名を右クリックすると現れる選択肢の中から、[名前を変更する]を選択してクリックしますと、同様に、シート名を書き換える事が出来る様になります) それから、「ユーザ設定」ではなく、「セルの書式設定」です。 例えば、1日シートのB1セルの書式設定の表示形式を[ユーザー定義]の yyyy"年"m"月"d"日 "aaaa にする際には、以下の様な操作を行って下さい。 1日シートのB1セルを右クリック ↓ 現れた選択肢の中にある[セルの書式設定]をクリック ↓ 現れた「セルの書式設定」ダイアログボックスの[表示形式]タブをクリック ↓ 現れた「分類」欄の中にある[ユーザー定義]をクリック ↓ 現れた「種類」欄に yyyy"年"m"月"d"日 "aaaa と入力 ↓ 「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック >関数をコピーするときはshiftとctrlとenter同時に押すのでしょうか? 関数のみをコピーして、書式設定はコピーしたくはないという事なのでしょうか? もし、書式設定をコピーしないとなりますと、記入用シートの日付の表示や、各日付のシートのinやout欄の時刻表示が、正しく表示されない事になってしまいますから、関数のみをコピーして貼り付けるのはかえって面倒な気が致しますが、敢えてそうされたいと仰るのでしたら、次の様な操作となります。(他にも色々なやり方があり、下記の方法はほんの一例です) コピー元のセル(或いはセル範囲)を右クリック ↓ 現れた選択肢の中にある[コピー]をクリック ↓ 貼り付け先のセル(或いはセル範囲)を右クリック ↓ 現れた選択肢の中にある[形式を選択して貼り付け]をクリック ↓ 現れた「形式を選択して貼り付け」ダイアログボックスの中にある[数式]と記されている箇所をクリックして、チェックを入れる ↓ 現れた「形式を選択して貼り付け」ダイアログボックスの[OK]ボタンをクリック 因みに、「形式を選択して貼り付け」ダイアログボックスの中にある[罫線を除くすべて]と記されている箇所をクリックして、チェックを入れてから、[OK]ボタンをクリックしますと、罫線を変える事無く、関数と書式設定の双方を貼り付ける事が出来ます。 それから、「コピー元のセルを右クリック」→「現れた選択肢の中にある[コピー]をクリック」の操作の代わりに、「コピー元のセルを選択」→「[Ctrl]キーを押しながらアルファベットの[C]キーを押す」でも同じ事が出来ます。 後、コピー&貼り付けを行う際には、ドラッグ アンド ドロップ(オートフィル)を行うと簡単な場合もあります。 ドラッグ アンド ドロップは単一のセルに対してだけではなく、セル範囲に対しても行う事が可能です。 【参考URL】 よねさんのWordとExcelの小部屋 > Excel(エクセル)講座の総目次 > Excel(エクセル)基本講座の目次 > オートフィルの使い方 http://www.eurus.dti.ne.jp/yoneyama/Excel/input_autofir.htm nanapi > パソコン・ソフトウェア > ソフトウェア > オフィス系ソフト > Excel > 5 > ドラッグアンドドロップでExcelを便利に編集 http://nanapi.jp/197/
その他の回答 (5)
- kagakusuki
- ベストアンサー率51% (2610/5101)
>しかしエラーが出ます(^^; 1日シートのA5セルでですか!? 1日シートのA5セルに入力する数式である =IF(AND(ISNUMBER($B$1),ISNUMBER(1/(ROWS($5:5)<=COUNTIF(OFFSET(作業用!$B:$B,,MATCH($B$1,作業用!$B$3:$AF$3,0)-1),ROUNDUP(COLUMNS($A:A)/7,0)&"#*")))),,"") は、B1セルの値や 1/(ROWS($5:5)<=COUNTIF(OFFSET(作業用!$B:$B,,MATCH($B$1,作業用!$B$3:$AF$3,0)-1),ROUNDUP(COLUMNS($A:A)/7,0)&"#*")) の計算結果が数値の場合には、 ROWS($5:5) の計算結果を表示し、B1セルの値や 1/(ROWS($5:5)<=COUNTIF(OFFSET(作業用!$B:$B,,MATCH($B$1,作業用!$B$3:$AF$3,0)-1),ROUNDUP(COLUMNS($A:A)/7,0)&"#*")) の計算結果が数値の場合には、何も表示しない様にする関数であり、ここで言う数値以外とはエラーとなる場合も含まれていますから、B1セルの値や 1/(ROWS($5:5)<=COUNTIF(OFFSET(作業用!$B:$B,,MATCH($B$1,作業用!$B$3:$AF$3,0)-1),ROUNDUP(COLUMNS($A:A)/7,0)&"#*")) の計算結果がエラーとなる場合では、 =IF(AND(ISNUMBER($B$1),ISNUMBER(1/(ROWS($5:5)<=COUNTIF(OFFSET(作業用!$B:$B,,MATCH($B$1,作業用!$B$3:$AF$3,0)-1),ROUNDUP(COLUMNS($A:A)/7,0)&"#*")))),,"") の結果自体は、何も表示されないというだけで、エラーとはならない筈です。 そして、 ROWS($5:5) という単純な関数の部分でエラーとなるとは考え難いため、1日シートのA5セルに入力した数式がエラーとなる事は考え難いと思います。 ですから、1日シートのA5セルの数式がエラーとなるとしますと、質問者様の入力ミス等により、ANo.1で挙げた1日シートのA5セルの数式とは異なる数式となっているという可能性もあるかも知れませんので、入力された数式を再度、御確認願います。(特に括弧やカンマの数等には御注意願います) >小窓が出てきて「値の更新」でエクセル用紙を保存みたくしようとするのです。 それはエラーなのでしょうか? データのバックアップを取っておくための、[自動バックアップ] 等が行われているという事とは違うのでしょうか? 質問者様の仰る「エクセル用紙」とは何の事を意味しているのかは不明ですが、データが保存される事にどのような問題があるのでしょうか? そのまま、保存が終了するまで待つ訳には参らないのでしょうか? >それと 0:00:01 9:00 12:00 16:00 をいれるときは回答にはカンマがついていましたが 付けるのですか? 紛らわしい記し方をしてしまい申し訳御座いません、カンマは付けずに御入力願います。
お礼
連絡が遅れましたが、完成しました。 ありがとございました。 ちょっと変更点がありまして… 何度もすみません。 時間なのですが、【9:00】などと入れないとダメなので そこを9だけにしたいのですがすべて【分】はいらないのです。 簡単に直せますでしょうか?
補足
何度もすみません。 そして親切な対応有難うございます。 1日のシートでB1に関数をいれてユーザ設定をすると日にちがでるんですよね? まずそれがでなくて困っています。 関数をコピーするときはshiftとctrlとenter同時に押すのでしょうか? すみません素人でよろしくお願いいたします。
- kagakusuki
- ベストアンサー率51% (2610/5101)
ANo.3の続きです。 次に、1日シートのE5セルに次の数式を入力して下さい。 =IF(ISNUMBER($A5),INDEX(記入用!$C:$BL,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<9:00")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<0:00:01")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1,MATCH($B$1,記入用!$C$3:$BL$3,0)+1),"") 次に、1日シートのL5セルに次の数式を入力して下さい。 =IF(ISNUMBER($H5),INDEX(記入用!$C:$BL,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<12:00")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<9:00")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1,MATCH($B$1,記入用!$C$3:$BL$3,0)+1),"") 次に、1日シートのS5セルに次の数式を入力して下さい。 =IF(ISNUMBER($O5),INDEX(記入用!$C:$BL,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<16:00")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<12:00")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1,MATCH($B$1,記入用!$C$3:$BL$3,0)+1),"") 次に、1日シートのZ5セルに次の数式を入力して下さい。 =IF(ISNUMBER($V5),INDEX(記入用!$C:$BL,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<99")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<16:00")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1,MATCH($B$1,記入用!$C$3:$BL$3,0)+1),"") 次に、1日シートのA5~AB5の範囲をコピーして、同じ列の6行目以下に貼り付けて下さい。 次に、1日シートのコピーシートを30枚作成し、それらのシート名を「2日」~「31日」に変更して下さい。 以上です。
- kagakusuki
- ベストアンサー率51% (2610/5101)
ANo.2の続きです。 次に、1日シートのC5セルに次の数式を入力して下さい。 =IF(ISNUMBER($A5),INDEX(記入用!$C:$BL,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<9:00")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<0:00:01")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1,MATCH($B$1,記入用!$C$3:$BL$3,0)),"") 次に、1日シートのJ5セルに次の数式を入力して下さい。 =IF(ISNUMBER($H5),INDEX(記入用!$C:$BL,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<12:00")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<9:00")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1,MATCH($B$1,記入用!$C$3:$BL$3,0)),"") 次に、1日シートのQ5セルに次の数式を入力して下さい。 =IF(ISNUMBER($O5),INDEX(記入用!$C:$BL,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<16:00")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<12:00")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1,MATCH($B$1,記入用!$C$3:$BL$3,0)),"") 次に、1日シートのX5セルに次の数式を入力して下さい。 =IF(ISNUMBER($V5),INDEX(記入用!$C:$BL,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<99")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<16:00")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1,MATCH($B$1,記入用!$C$3:$BL$3,0)),"") 次に、1日シートのD5セルに次の数式を入力して下さい。 =IF(ISNUMBER($A5),"~","") 次に、1日シートのK5セルに次の数式を入力して下さい。 =IF(ISNUMBER($H5),"~","") 次に、1日シートのR5セルに次の数式を入力して下さい。 =IF(ISNUMBER($O5),"~","") 次に、1日シートのY5セルに次の数式を入力して下さい。 =IF(ISNUMBER($V5),"~","") ※サイト側のシステムの不具合なのか、入力可能文字数の限界が異常に少なくなっていて、またもや解答欄にこれ以上文字を入力出来なくなったため、残りは次回に回答させて頂きます。
- kagakusuki
- ベストアンサー率51% (2610/5101)
【方法その2】 まず、記入用シートのC3セルに次の数式を入力して下さい。 =IF(ISNUMBER(($A$4&"/"&$B$4&"/"&COLUMNS($C:D)/2)+0),($A$4&"/"&$B$4&"/"&COLUMNS($C:D)/2)+0,"") 次に、記入用シートのC3セルの書式設定の表示形式を[ユーザー定義]の d"日"(aaa) にして下さい。 次に、記入用シートのC3セルとD3セルを結合して下さい。 次に、記入用シートのC3~D3の範囲をコピーして、記入用シートのE3~BL3の範囲に貼り付けて下さい。 次に、1日シートのB1セルに次の数式を入力して下さい。 =IF(ISNUMBER((記入用!$A$4&"/"&記入用!$B$4&"/"&MID(CELL("filename",B1),FIND("]",CELL("filename",B1))+1,FIND("日",CELL("filename",B1),FIND("]",CELL("filename",B1)))-FIND("]",CELL("filename",B1))-1))+0),(記入用!$A$4&"/"&記入用!$B$4&"/"&MID(CELL("filename",B1),FIND("]",CELL("filename",B1))+1,FIND("日",CELL("filename",B1),FIND("]",CELL("filename",B1)))-FIND("]",CELL("filename",B1))-1))+0,"") 次に、1日シートのB1セルの書式設定の表示形式を[ユーザー定義]の yyyy"年"m"月"d"日 "aaaa にして下さい。 次に、1日シートの B4セルに 名前 C4セルに 時間 F4セルに 前日 G4セルに 備考 と入力して下さい。 次に、1日シートのA3~G3セルを結合して下さい。 次に、1日シートのC4~E4セルを結合して下さい。 次に、1日シートのA3~G4の範囲をコピーして、1日シートのH3~AB4の範囲に貼り付けて下さい。 次に、1日シートの A3セルに ~8:59出勤、 H3セルに 9:00~11:59出勤、 O3セルに 12:00~15:59出勤、 V3セルに 16:00以降出勤、 と入力して下さい。 次に、1日シートのA5セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER($B$1),ISNUMBER(1/(ROWS($5:5)<=COUNTIF(OFFSET(記入用!$C:$C,,MATCH($B$1,記入用!$C$3:$BL$3,0)-1),"<9:00")-COUNTIF(OFFSET(記入用!$C:$C,,MATCH($B$1,記入用!$C$3:$BL$3,0)-1),"<0:00:01")))),ROWS($5:5),"") 次に、1日シートのH5セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER($B$1),ISNUMBER(1/(ROWS($5:5)<=COUNTIF(OFFSET(記入用!$C:$C,,MATCH($B$1,記入用!$C$3:$BL$3,0)-1),"<12:00")-COUNTIF(OFFSET(記入用!$C:$C,,MATCH($B$1,記入用!$C$3:$BL$3,0)-1),"<9:00")))),ROWS($5:5),"") 次に、1日シートのO5セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER($B$1),ISNUMBER(1/(ROWS($5:5)<=COUNTIF(OFFSET(記入用!$C:$C,,MATCH($B$1,記入用!$C$3:$BL$3,0)-1),"<16:00")-COUNTIF(OFFSET(記入用!$C:$C,,MATCH($B$1,記入用!$C$3:$BL$3,0)-1),"<12:00")))),ROWS($5:5),"") 次に、1日シートのV5セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER($B$1),ISNUMBER(1/(ROWS($5:5)<=COUNTIF(OFFSET(記入用!$C:$C,,MATCH($B$1,記入用!$C$3:$BL$3,0)-1),"<99")-COUNTIF(OFFSET(記入用!$C:$C,,MATCH($B$1,記入用!$C$3:$BL$3,0)-1),"<16:00")))),ROWS($5:5),"") 次に、1日シートのB5セルに次の数式を入力して下さい。 =IF(ISNUMBER($A5),INDEX(記入用!$A:$A,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<9:00")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<0:00:01")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1),"") 次に、1日シートのI5セルに次の数式を入力して下さい。 =IF(ISNUMBER($H5),INDEX(記入用!$A:$A,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<12:00")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<9:00")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1),"") 次に、1日シートのP5セルに次の数式を入力して下さい。 =IF(ISNUMBER($O5),INDEX(記入用!$A:$A,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<16:00")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<12:00")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1),"") 次に、1日シートのW5セルに次の数式を入力して下さい。 =IF(ISNUMBER($V5),INDEX(記入用!$A:$A,SUMPRODUCT(ISNUMBER(ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1)))*(COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<99")-COUNTIF(OFFSET(記入用!$C$4,1,MATCH($B$1,記入用!$C$3:$BL$3,0)-1,ROW(記入用!$A$4:INDEX(記入用!$A:$A,MATCH("*?",記入用!$A:$A,-1)-1))-ROW(記入用!$C$4)+1),"<16:00")<ROWS($5:5))*1)+ROW(記入用!$C$4)+1),"") ※まだ途中なのですが、解答欄の入力可能文字数の限界を超えてしまうため、残りは次回に回答させて頂きます。
- kagakusuki
- ベストアンサー率51% (2610/5101)
少々デザインを変更しまして、 元データの表を入力するシートのシート名を「Sheet1」から「記入用」に変更し、 1日の出勤状況を表示するシートのシート名を「Sheet2」から「1日」に変更し、 2日の出勤状況を表示するシートのシート名を「Sheet3」から「2日」に変更し、 3日の出勤状況を表示するシートのシート名を「Sheet4」から「3日」に変更し、 ・ ・ ・ ・ ・ 31日の出勤状況を表示するシートのシート名を「Sheet32」から「31日」に変更するものとします。 又、記入用シートのA4セルに西暦年を入力し、記入用シートのB4セルに月を示す数を入力するものとします。 【方法その1】 ここでは、適当な未使用のシート(ここでは、そのシートのシート名を、仮に「作業用」とします)を1枚、補助的な計算処理を専用に行うためのシートとして使用するものとします。 まず、記入用シートのC3セルに次の数式を入力して下さい。 =IF(ISNUMBER(($A$4&"/"&$B$4&"/"&COLUMNS($C:D)/2)+0),($A$4&"/"&$B$4&"/"&COLUMNS($C:D)/2)+0,"") 次に、記入用シートのC3セルの書式設定の表示形式を[ユーザー定義]の d"日"(aaa) にして下さい。 次に、記入用シートのC3セルとD3セルを結合して下さい。 次に、記入用シートのC3~D3の範囲をコピーして、記入用シートのE3~BL3の範囲に貼り付けて下さい。 次に、作業用シートの A1セルに 0:00:01、 A2セルに 9:00、 A3セルに 12:00、 A4セルに 16:00、 と入力して下さい。 次に、作業用シートのB3セルに次の数式を入力して下さい。 =IF(INDEX(記入用!$C:$BL,ROW(),COLUMNS($B:B)*2-1)="","",INDEX(記入用!$C:$BL,ROW(),COLUMNS($B:B)*2-1)) 次に、作業用シートのB3セルの書式設定の表示形式を[ユーザー定義]の d"日" にして下さい。 次に、作業用シートのB5セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER(INDEX(記入用!$C:$BL,ROW(),COLUMNS($B:B)*2-1)),INDEX(記入用!$C:$BL,ROW(),COLUMNS($B:B)*2-1)>0),MATCH(INDEX(記入用!$C:$BL,ROW(),COLUMNS($B:B)*2-1),$A$1:$A$4)&"#"&COUNTIF(B$4:B4,MATCH(INDEX(記入用!$C:$BL,ROW(),COLUMNS($B:B)*2-1),$A$1:$A$4)&"#*")+1,"") 次に、作業用シートのB3~B5の範囲をコピーして、作業用シートのC3~AF5の範囲に貼り付けて下さい。 次に、作業用シートのB5~AF5の範囲をコピーして、同じ列の6行目以下に(勤務者の人数を上回るのに十分な行数となるまで)貼り付けて下さい。 次に、1日シートのB1セルに次の数式を入力して下さい。 =IF(ISNUMBER((記入用!$A$4&"/"&記入用!$B$4&"/"&MID(CELL("filename",B1),FIND("]",CELL("filename",B1))+1,FIND("日",CELL("filename",B1),FIND("]",CELL("filename",B1)))-FIND("]",CELL("filename",B1))-1))+0),(記入用!$A$4&"/"&記入用!$B$4&"/"&MID(CELL("filename",B1),FIND("]",CELL("filename",B1))+1,FIND("日",CELL("filename",B1),FIND("]",CELL("filename",B1)))-FIND("]",CELL("filename",B1))-1))+0,"") 次に、1日シートのB1セルの書式設定の表示形式を[ユーザー定義]の yyyy"年"m"月"d"日 "aaaa にして下さい。 次に、1日シートの B4セルに 名前 C4セルに 時間 F4セルに 前日 G4セルに 備考 と入力して下さい。 次に、1日シートのA3~G3セルを結合して下さい。 次に、1日シートのC4~E4セルを結合して下さい。 次に、1日シートのA5セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER($B$1),ISNUMBER(1/(ROWS($5:5)<=COUNTIF(OFFSET(作業用!$B:$B,,MATCH($B$1,作業用!$B$3:$AF$3,0)-1),ROUNDUP(COLUMNS($A:A)/7,0)&"#*")))),ROWS($5:5),"") 次に、1日シートのB5セルに次の数式を入力して下さい。 =IF(ISNUMBER(OFFSET(B5,,-MOD(COLUMN()-COLUMN($A$4),7))),INDEX(記入用!$A:$A,MATCH(ROUNDUP(COLUMNS($A:B)/7,0)&"#"&ROWS($5:5),OFFSET(作業用!$B:$B,,MATCH($B$1,作業用!$B$3:$AF$3,0)-1),0)),"") 次に、1日シートのC5セルに次の数式を入力して下さい。 =IF(ISNUMBER(OFFSET(C5,,-MOD(COLUMN()-COLUMN($A$4),7))),INDEX(記入用!$C:$BL,MATCH(ROUNDUP(COLUMNS($A:C)/7,0)&"#"&ROWS($5:5),OFFSET(作業用!$B:$B,,MATCH($B$1,作業用!$B$3:$AF$3,0)-1),0),MATCH($B$1,記入用!$C$3:$BL$3,0)),"") 次に、1日シートのD5セルに次の数式を入力して下さい。 =IF(ISNUMBER(OFFSET(D5,,-MOD(COLUMN()-COLUMN($A$4),7))),"~","") 次に、1日シートのE5セルに次の数式を入力して下さい。 =IF(ISNUMBER(OFFSET(E5,,-MOD(COLUMN()-COLUMN($A$4),7))),INDEX(記入用!$C:$BL,MATCH(ROUNDUP(COLUMNS($A:E)/7,0)&"#"&ROWS($5:5),OFFSET(作業用!$B:$B,,MATCH($B$1,作業用!$B$3:$AF$3,0)-1),0),MATCH($B$1,記入用!$C$3:$BL$3,0)+1),"") 次に、1日シートのC5セルとE5セルの書式設定の表示形式を[ユーザー定義]の [h]:mm にして下さい。 次に、1日シートのA3~G5の範囲をコピーして、1日シートのH3~AB5の範囲に貼り付けて下さい。 次に、1日シートのA5~AB5の範囲をコピーして、同じ列の6行目以下に貼り付けて下さい。 次に、1日シートの A3セルに ~8:59出勤、 H3セルに 9:00~11:59出勤、 O3セルに 12:00~15:59出勤、 V3セルに 16:00以降出勤、 と入力して下さい。 次に、1日シートのコピーシートを30枚作成し、それらのシート名を「2日」~「31日」に変更して下さい。 以上です。
お礼
親切な回答ありがとうございます。 本当に嬉しいです。(((o(*゜▽゜*)o))) しかしエラーが出ます(^^; 一日シートのA5に関数を入れるときにエラーが出ます。 小窓が出てきて「値の更新」でエクセル用紙を保存みたくしようとするのです。 何回かはじめからやったのですが… ダメでした。 それと 0:00:01 9:00 12:00 16:00 をいれるときは回答にはカンマがついていましたが 付けるのですか? 試行錯誤でこの時間までかかったのですができなく 回答していただいたのに、また質問してしまいすみません。 すみません、どうしても完成が欲しくて。
お礼
いろいろとありがとうございました。 エクセルでifやブイルックなど簡単なものでしたら できるのですが… ここまで複雑だと…すみません。 以前に =IF(SUMPRODUCT((記入!$D$5:$D$120>=9)*(記入!$D$5:$D$120<=11)*(記入!$B$5:$B$120=$B$1))>=ROW(C1),INDEX(記入!$C$1:$C$120,SMALL(IF((記入!$D$5:$D$120>=9)*(記入!$D$5:$D$120<=11)*(記入!$B$5:$B$120=$B$1),ROW(記入!$C$5:$C$120),""),ROW(C1))),"") これをコントロールとシフトとエンタ-で入れていたので そなのかな?と思っていたのです。ありとあらゆることを一応聞こうと思いまして 親切に本当にありがとうございました。 教えてgooはあまり使ったことがないのですが 最大限にありがとうございます。と思っております。 どうもありがとうございました。