エクセルで出勤表を作成したいが困っています

このQ&Aのポイント
  • エクセルで出勤表を作成する方法について困っています。シート1には70人の名前が縦軸に入力されており、横軸には31日分の日にちが書かれています。日にちと名前が合うセルに出勤時間を入力し、シート2に自動的に反映されるようにしたいのですが、うまくできません。
  • 出勤表を作成するためにエクセルを使用していますが、シート1には70人の名前が縦軸に入力されており、横軸には31日分の日にちが書かれています。日にちと名前が合うセルに出勤時間を入力すると、シート2に自動的に反映されるようにしたいのですが、どうしてもうまくいきません。
  • エクセルで出勤表を作成する方法に困っています。シート1には70人の名前が縦軸に入力されており、横軸には31日分の日にちが書かれています。日にちと名前が合うセルに出勤時間を入力し、シート2に反映させる方法を教えてください。
回答を見る
  • ベストアンサー

エクセルで出勤表を・・・分からなくお願いします。

シート1には縦軸の所に名前が70人くらい最初から入れてあり 横軸には日にちを31日まで最初から書いてあり 日にちと名前が合うところにinとout時間をいれると シート2(10月1日)の表に自動的に上に詰めて反映されるようにしたいのですが・・ できなく、困っています。 シートは31日分あります。出勤時間を入れるシート(ここではシート1)そして 日にち分のシート31枚で合計32シートで構成されるものを考えています。 日にち(10月2日とか)のシートを見ればその日に誰が何時に出勤するかわかるようにしています。 画像が見づらいかもしれませんがすみません。日付別で9時~11時と12時~15時と16時以降と 三つに分かれてそれぞれに反映したいです。(しかも上詰めで) 何卒よろしくお願いいたします。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.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/

nb75gfmv73
質問者

お礼

いろいろとありがとうございました。 エクセルで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はあまり使ったことがないのですが 最大限にありがとうございます。と思っております。 どうもありがとうございました。

その他の回答 (5)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

>しかしエラーが出ます(^^;  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 をいれるときは回答にはカンマがついていましたが 付けるのですか?  紛らわしい記し方をしてしまい申し訳御座いません、カンマは付けずに御入力願います。

nb75gfmv73
質問者

お礼

連絡が遅れましたが、完成しました。 ありがとございました。 ちょっと変更点がありまして… 何度もすみません。 時間なのですが、【9:00】などと入れないとダメなので そこを9だけにしたいのですがすべて【分】はいらないのです。 簡単に直せますでしょうか?

nb75gfmv73
質問者

補足

何度もすみません。 そして親切な対応有難うございます。 1日のシートでB1に関数をいれてユーザ設定をすると日にちがでるんですよね? まずそれがでなくて困っています。 関数をコピーするときはshiftとctrlとenter同時に押すのでしょうか? すみません素人でよろしくお願いいたします。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 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)
回答No.3

 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)
回答No.2

【方法その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)
回答No.1

 少々デザインを変更しまして、 元データの表を入力するシートのシート名を「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日」に変更して下さい。  以上です。

nb75gfmv73
質問者

お礼

親切な回答ありがとうございます。 本当に嬉しいです。(((o(*゜▽゜*)o))) しかしエラーが出ます(^^; 一日シートのA5に関数を入れるときにエラーが出ます。 小窓が出てきて「値の更新」でエクセル用紙を保存みたくしようとするのです。 何回かはじめからやったのですが… ダメでした。 それと 0:00:01  9:00 12:00 16:00 をいれるときは回答にはカンマがついていましたが 付けるのですか? 試行錯誤でこの時間までかかったのですができなく 回答していただいたのに、また質問してしまいすみません。 すみません、どうしても完成が欲しくて。

関連するQ&A

  • エクセルでシフト管理表を作りたく、教えてください。

    シート1には縦軸の所に名前が70人くらい最初から入れてあり 横軸には日にちを31日まで最初から書いてあり 日にちと名前が合うところにinとout時間をいれると(画像参照) 日付が合うシートの表に自動的に上に詰めて名前とinとoutが反映されるようにしたいのですが・・ できなく、困っています。 しかも9時~11時と12時~15時と16時以降と 三つに分かれてそれぞれに反映したいです。 シート2(10月1日)     9-11   in  out   12-15   in  out  16~    in  out  1   山田太郎  9  18                    斎藤四郎 17  23 2 シートは31日分あります。出勤時間を入れるシート(ここではシート1)そして 日にち分のシート31枚で合計32シートで構成されるものを考えています。 日にち(10月2日とか)のシートを見ればその日に誰が何時に出勤するかわかるようにしています。 何卒よろしくお願いいたします。

  • エクセルでの質問です。お願いします。

    シート1には縦軸の所に名前が70人くらい最初から入れてあり 横軸には日にちを31日まで最初から書いてあり 日にちと名前が合うところにinとout時間をいれると(画像参照) 日付が合うシートの表に自動的に上に詰めて名前とinとoutが反映されるようにしたいのですが・・ できなく、困っています。 しかも9時~11時と12時~15時と16時以降と 三つに分かれてそれぞれに反映したいです。 シート2(10月1日)     9-11   in  out   12-15   in  out  16~    in  out  1   山田太郎  9  18                    斎藤四郎 17  23 2 シートは31日分あります。出勤時間を入れるシート(ここではシート1)そして 日にち分のシート31枚で合計32シートで構成されるものを考えています。 日にち(10月2日とか)のシートを見ればその日に誰が何時に出勤するかわかるようにしています。 何卒よろしくお願いいたします。

  • エクセルの質問です。関数で作りたいです(>人<;)

    シート1には縦軸の所に名前が70人くらい最初から入れてあり 横軸には日にちを31日まで最初から書いてあり 日にちと名前が合うところにinとout時間をいれると(画像参照) 日付が合うシートの表に自動的に上に詰めて名前とinとoutが反映されるようにしたいのですが・・ できなく、困っています。 しかも9時~11時と12時~15時と16時以降と 三つに分かれてそれぞれに反映したいです。 シート2(10月1日)     9-11   in  out   12-15   in  out  16~    in  out  1   山田太郎  9  18                    斎藤四郎 17  23 2 シートは31日分あります。出勤時間を入れるシート(ここではシート1)そして 日にち分のシート31枚で合計32シートで構成されるものを考えています。 日にち(10月2日とか)のシートを見ればその日に誰が何時に出勤するかわかるようにしています。 何卒よろしくお願いいたします。

  • EXCELでの月別 日別の勤務表同時作成について

    現在、EXCEL2007にて、シート1には月別のシフト表を年と月を変えると自動でその月の日にち、曜日も変わるように作成しております。縦軸には氏名、横軸には日にち、曜日を並べており、縦に各人の出勤、退社を記入させるように作成しております。このシート1をもとに、別シートで日にちを選ぶと、その日に入っている氏名と勤務時間をガントチャート形式(時間帯別)で、自動的に表示作成できるようにしたいのですが、関数がわからず、現在、苦戦しております。 どなたか、月別勤務表から、その月のある日にひ分だけを抽出し、その日に入っている者のシフト時間を表示できるようにするための方法を教えていただけないでしょうか? シート1のサンプル  ××××年××月          1日 2日 3日 4日・・・・          月  火  水  木・・・・・    A君 出勤  9:00     退社 12:00 B君 出勤  10:00     退社  19:00 上記のような表で、たとえば、1日(月)にシフトに入っている者だけを抽出し、別シートで 日別のガントチャートを作成したいです

  • エクセルでの表の作り方

    横軸が日付、縦軸は利益で毎日の株利益を管理したいです。 例えば、 9月21日 1000 9月22日 1000 9月26日 1000 を表にすると自動的に横軸に株取引の無い9月22日、23日、24日ができてしまいます。 株取引が無い日は横軸に目盛りを作りたくないです。

  • エクセルで出勤表をつくる

    エクセルで、月別でシートに分けて1年分の出勤表を作っています。 印刷して勤務時間を手書きしてもらうためのものです。 下記のことで困ってますので助けてください。 考えている作り方としては、 (1)セルA1に年を設定し、A2に月を設定する (2)=DATE($A$1,$A&2,1~31)で、日付を出す (3) (2)の日付のセルの、書式設定をユーザー定義「d」にして日のみを表示 (4) (2)の日付の横のセルに=TEXT(WEEKDAY((2)のセル,1),"aaa")で曜日を表示 なのですが、(2)で、31まで入れると、2月シートの29の下に、(3月の)1と2が表示されてしまいます。30日までしかない月も同様です。 これを、その月の月末の日付までしか表示しないようにしたいです。 どうしたらいいでしょうか。

  • エクセルで出勤表から出勤者の名前を出したいのですが。

    エクセルで出勤表から出勤者の名前を出したいのですが。 介護施設に勤務しています。A~E(職員名とする)までの5人が勤務しているとします。今ここに、縦がA~E、横が月日のエクセルの表(表1とする)があるとします。 仮に6月1日はA,B,Cの3人が出勤で表の該当セルに○が入力されています。6月2日はB,D,Eが出勤で同様に○が入力されています。こんな感じで月末までの勤務表が出来ているとします。 ここで別のシートに「今日の出勤者」として当日の出勤者を表(表2)に出したいと思っています。 私が望んでいるのは、表1の希望の月日をクリック、もしくは入力すると、自動で表2のセルにその日の出勤者だけの名前が返せればいいのですが・・・。 本日の出勤者として本部に名前入りの表をあげないといけなく、これまでは表1から該当日の○を数えては、その職員名を手書きで書いて送っていました。この煩雑な作業を効率化したいと思っています。 よろしくご教授お願いいたします。

  • エクセルの表でリンクさせて列行を入れ替える方法

    教えてください。 横軸に日付が1日から31日まで入っていて縦軸に項目が何十個もあります。これを別のシートに縦軸に日付が1日から31日まであるセルにリンクさせ完全に縦横逆になる表を作るにはどのようにしたら簡単にできるか教えてください。

  • Excel の出勤管理表について

    勤務地ごとに分かれている出勤管理表のシートを、関数を使用してひとつにまとめたいです。 必要であれば、作業用の列や行の挿入、シートの追加もかまいません。 ~現状~ ・勤務地ごとにシートが分かれています。 ・各シートには、その勤務地に通勤可能なスタッフのみが、載っています。 ・同一スタッフが、シートを跨いで複数載っているケースもあります。 ・縦軸がスタッフID、横軸が日付、交差しているセルに出勤マークが入力されています。 ~希望~ 勤務地ごとに分かれているシートをまとめ、スタッフ全員が記載された一つのシートを、別に作成したいです。 ----------------------- 【シート1】(勤務地:●)   A  B  C  D  E  F 1      日付 2  ID  1  2  3  4  5   3 1111    ●       ●  ----------------------- 【シート2】(勤務地:☆)   A  B  C  D  E  F 1      日付 2  ID  1  2  3  4  5   3 1111 ☆     ☆ 4 2222    ☆    ☆ ----------------------- 【シート3】(勤務地:◆)   A  B  C  D  E  F 1      日付 2  ID  1  2  3  4  5   3 2222       ◆ 4 3333    ◆       ◆ ----------------------- 上記のシートをまとめて、、、 ----------------------- 【シート4】(まとめ)   A  B  C  D  E  F 1      日付 2  ID  1  2  3  4  5   3 1111 ☆  ●  ☆     ● 4 2222    ☆  ◆ ☆ 5 3333    ◆        ◆ ----------------------- このようなシートを、別途作成したいのですが、何か良い方法ございますでしょうか。 初心者なりに知っている関数を組み合わせどうにかできないか、ない知恵をいろいろ絞ってみたのですが歯が立ちませんでした。 つたない説明で申し訳ございません。 どなたかお知恵をお貸しいただけると、大変有難いです。 どうぞよろしくお願いいたします。

  • シフト表で困ってます

    アルバイトのシフト表を作ろうとしてるのですが なかなか、うまくいきません。 どなたかお教えください。   縦軸に、出勤時間と退勤時間と休憩時間   横軸に、30毎の時間を入れる   それを、棒グラフで表わす なんとかやってみたのですが、関数式の中にどうやって 時間と分を組み込めばいいのか分からなくて。 一時間後とならできるのですが。 分かりにくい文ですみませんがお願いします。

専門家に質問してみよう