- ベストアンサー
再びEXCELの関数教えてください。
1ヶ月のカレンダーを作成しています。 カレンダーの様式は一行が一週間で月曜日に始まり日曜日に終わっています。 例えば11月なら1行目は1日が「E,3・4」のセルになります。4日は「A,5・6」のセルになります。 一日が2行あるのは上の行には日付を、下の行には入力したい数情報を入れるためのセルです。このようなカレンダーに毎日残業時間を入力していきます。 残業時間は午後5時以降からです。これは不変です。午後10時まで「普通残業」午後10時以降は「深夜残業」になります。これも不変です。 そこで例えば、11月1日に午後8時まで残業した場合は、1日と表示しているセルの下のセルに「3」と入力します。 するとカレンダーの11月の下の方に「普通残業合計」「深夜残業合計」とそれぞれ表示されたセルがあり、「普通残業合計」のところに「3」と表示させたいのです。 次に11月2日に午後11時まで残業したとします。 カレンダーの2日と表示されているセルの下のセルに「6」を入力します。 すると先程の11月の下の方の「普通残業合計」は1日の「3」と2日の「5」を足した「8」と表示され、「深夜残業合計」には「1」と表示させたいのです。 以下同じようにそれぞれの日付に残業した時間だけ数字を入力していき、普通残業時間、深夜残業時間、それぞれ表示させたいのです。 どのような関数を使用すると毎日その日付のところに数字を入力するだけでそれぞれの合計が出るでしょうか。 宜しくお願い致します。 なお数式の入力の仕方ですが「( )」や「 、」などは必ず入れなければならないですよね。その場合大文字ならば不可とかあるのでしょうか? せっかく教えてもらってもその辺が分からずエラーになる場合があるかもしれませんので詳しく教えてもらえれば是幸いです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
次の式をコピーしてそのまま貼り付けてみてください。 ・普通残業合計 =SUMIF(A4:G4,"<=5",A4:G4)+COUNTIF(A4:G4,">5")*5+SUMIF(A6:G6,"<=5",A6:G6)+COUNTIF(A6:G6,">5")*5+SUMIF(A8:G8,"<=5",A8:G8)+COUNTIF(A8:G8,">5")*5+SUMIF(A10:G10,"<=5",A10:G10)+COUNTIF(A10:G10,">5")*5+SUMIF(A12:G12,"<=5",A12:G12)+COUNTIF(A12:G12,">5")*5+SUMIF(A14:G14,"<=5",A14:G14)+COUNTIF(A14:G14,">5")*5 ・深夜残業合計 =SUMIF(A4:G4,">5",A4:G4)-COUNTIF(A4:G4,">5")*5+SUMIF(A6:G6,">5",A6:G6)-COUNTIF(A6:G6,">5")*5+SUMIF(A8:G8,">5",A8:G8)-COUNTIF(A8:G8,">5")*5+SUMIF(A10:G10,">5",A10:G10)-COUNTIF(A10:G10,">5")*5+SUMIF(A12:G12,">5",A12:G12)-COUNTIF(A12:G12,">5")*5+SUMIF(A14:G14,">5",A14:G14)-COUNTIF(A14:G14,">5")*5 前回の回答では1行、あるいは1列のみ対応でしたので、多少修正しました。 ただ、この式をこのままコピーして貼り付けるとなぜか数行、セルが結合されますので、手動で戻すか、一旦メモ帳などに貼り付けてからそれをコピーしてExcelに貼り付けてください。
その他の回答 (5)
- HitomiKurose
- ベストアンサー率38% (54/141)
ちょっとだけ簡単に出来ます。 深夜残業合計の方は =SUM(A4:G4)+SUM(A6:G6)+SUM(A8:G8)+SUM(A10:G10+SUM(A12:G12+SUM(A14:G14)-普通残業合計 でいいですよね。
お礼
回答ありがとうございます。 なるほどその手もありましたね。 でも本当に皆様の暖かいご指導のもと、ちょっとEXCELを理解できたような気がします。 本当にありがとうございました。
- hinebot
- ベストアンサー率37% (1123/2963)
何度も済みません。pesoさんの回答の意味が分かりましたので説明します。とその間にpesoさん自らが数式を示してくれましたね。 まず、普通残業合計 =SUMIF(A4:G4,"<=5",A4:G4)+COUNTIF(A4:G4,">5")*5 についてです。(以下は、行をまたいでいるのを全部足しているだけですのでここまでの説明でokかと。) ・SUMIFの部分は、「範囲A4~G4の中で5以下の部分を合計しなさい」 ・COUNTIFの部分はCOUNTIFが「範囲A4~G4の中で5より大きい(6以上)の部分の個数を求めなさい」で、*5がついてるので、それを5倍する、つまり「範囲A4~G4の中で6以上の部分の個数を求め、それを5倍しなさい」ということになります。 それを足すことにより、普通残業合計になります。(足し算をしないと深夜残業をした日の普通残業分の時間がカウントされないからです。) 次に深夜残業合計 =SUMIF(A4:G4,">5",A4:G4)-COUNTIF(A4:G4,">5")*5 (以下については普通残業合計のときと同じです。) ・SUMIFの部分は「範囲A4~G4の中で5より大きい(6以上)部分を合計しなさい」 ・COUNTIFの部分は「範囲A4~G4の中で5より大きい部分の個数を求め、それを5倍しなさい」となります。 SUMIFの結果から、COUNTIFの結果を引くことにより、深夜残業合計になります。(引き算がないと、深夜残業をした日の総残業時間となってしまいます。) 最後にSUMIF関数に範囲が二つあることについてですが、 SUMIF(範囲1,条件,範囲2) のとき「範囲1」は条件を満たすものを検索する範囲、「範囲2」は合計を出す範囲になります。普通は範囲1=範囲2で使うことが多いと思います。 これで、ご理解いただけたでしょうか。
お礼
詳しい説明ありがとうございます。 ハイ,理解しました。 何とか無事に解決できました。
- p-leisure
- ベストアンサー率38% (7/18)
ちょっと手を離している間にいろんな回答が寄せられていますが、 私なりの回答を・・・ 内容が複雑すぎるので、簡単なところから・・・ まず、「( )」や「、」は、自動的に半角になります。ご存じかと思いますが。 次に、関数名やセル名も、自動的に大文字になります。 日本語入力をoffにしていれば、全く問題はありませんが・・。 セル名を書く時は、「E3:E4」と書きましょう。 ちなみに、日付・普通残業・深夜残業を入力する為に、1日は3行必要ですよね? 4日がA列であるならば、日曜に始まり土曜で終わるのですよね? シートの1行目と2行目をあけてらっしゃるようなので、 第一週が、日:A3:A5,月:B3:B5・・・土:G3:G5となるでしょう。 通常6段あれば一ヶ月は足りますので、最下段(最終週)は、日:A18:A20,月:B18:B20・・・土:G18:G20となるでしょう。 11月2日の残業は、普通5と深夜1ですよね? B22に普通残業の合計を取れば、 =SUM(A4:G4)+SUM(A7:G7)+SUM(A10:G10)+SUM(A13:G13)+SUM(A16:G16)+SUM(A19:G19) B23に深夜残業の合計を取れば、 =SUM(A5:G5)+SUM(A8:G8)+SUM(A11:G11)+SUM(A14:G14)+SUM(A17:G17)+SUM(A20:G20) となります。 今までの方の回答は、普通残業と深夜残業を自動で振り分ける高度な方法みたいですね。 さすがです。
お礼
回答ありがとうございます。 また沢山の方から回答をいただき本当に感謝しております。 一人ずつ順番にお礼を申し上げたいのですが、今ざっと目を通してみてまず初めにp-leisureさんからお礼の言葉を書き込みたいと思います。 と言うのも、また私の説明が不足していた為にp-leisureさんには誤解をさせてしまっていたからです。本当に失礼致しました。 >日付・普通残業・深夜残業を入力する為に、1日は3行必要ですよね? いえ、2行でいいんです。1行目に日付2行目にその日の総残業時間を入れるのです。 >4日がA列であるならば、日曜に始まり土曜で終わるのですよね? 申し訳ございません。私の勘違いでした。壁にかかっているカレンダーを見ながら質問文を作成していましたのでずれてしまいました4日ではなく5日でした。 でも作成要領、入力要領に関して詳しく教えていただいて本当にありがとうございました。 >今までの方の回答は、普通残業と深夜残業を自動で振り分ける高度な方法みたいですね。 そのとおりなんです。上司から依頼されたのはまさに自動で振り分ける方法を申されましてそれで困っていた次第でございます。
- hinebot
- ベストアンサー率37% (1123/2963)
済みません。先の回答の最初の一文 >参考URL(あなたが以前された質問ですね)の#3のpesoさんの回答でよろしいかと思います は無視してください。勘違いしてまして、pesoさんの回答をよくよく見ると、私にもよく分かりませんでした。 で、私ならこうします。結論としてワンクッション置きます。 先ず、先の質問の#1のKODAMARさんの回答そのままですが、総残業時間から各日の普通残業時間と深夜残業時間を出してしまいます。もう一度書くと、 総残業時間が入ったセルをE4とし、 普通残業時間をセルJ1 深夜残業時間をセルK1に入れるとすると J1のセルには =IF(E4>5,5,E4) K1のところには =IF(E4<5,0,E4-5) とします。 (KODAMARさんの回答にある、「=E4-5」では、マイナスの数値が出てしまいますので、少し変えました。) この要領で、J1~J31、K1~K31まで作ります。(ちょっと面倒ですが) で、最後に普通残業合計を入れるセルに SUM(J1:J31) 深夜残業合計を入れるセルに SUM(K1:K31) とすれば良いわけです。 下手に、一つの関数で済ませようとするより、このようにワンクッション置く方が初心者(失礼)には間違いがないかと思います。
お礼
回答ありがとうございました。 確かにその要領でやれば各合計は出ると思います。 私も難しかったので上司に分けて入力する方法を提案したのですが却下されてしまいまして・・・ でもやっと解決いたしました。 本当にありがとうございました。
- hinebot
- ベストアンサー率37% (1123/2963)
参考URL(あなたが以前された質問ですね)の#3のpesoさんの回答でよろしいかと思います。 >なお数式の入力の仕方ですが「( )」や「 、」などは必ず入れなければならないですよね。その場合大文字ならば不可とかあるのでしょうか? 「大文字」と仰っているのは、全角・半角のことかと思います。 関数を入力する場合は、必ず、半角の記号を使います。 「、」(読点)は関数入力には使用しません。使うのは「,」(コンマ)ですね。入力モードを半角英数か、直接入力にしてから入力すると間違いないでしょう。 あと、行が複数にまたがっているので、各行ごとに小計の欄を設け、その小計の合計を「普通残業合計」「深夜残業合計」欄に反映させるようにされた方がうまくいくと思います。 念の為ですが、範囲の入力は「A6:G6」のように入れます。言葉で書くと「範囲の左上:範囲の右下」です。(もちろん、全部半角で入力します。)
お礼
今回も本当にありがとうございました。 BINGO!です。pesoさんのおかげで解決いたしました。 もうなんてお礼を申し上げていいか、涙が出てきそうです。 本当に感謝しております。20点なんて足りなすぎるくらいです。 やっと来年度から導入できそうです。 ありがとうございました。