電子書籍の厳選無料作品が豊富!

エクセル2010で、毎日の勤務時間を1人1ファイル1か月を1シートとして1年分12枚のシートで作成しています。  1シートの1行を1日分としてセルBに 勤務開始時間 セルCに 勤務終了時間を手入力ですると セルDに 勤務時間が表示されるように計算式を入れています。(休憩時間は有りません) A列 縦に1日から31日までの項目が有ります。

ここで、例えば 1日 2日と仕事をして勤務時間を入力して、3日 4日 5日と休みで入力しなくて、6日仕事で勤務時間を入力した時点で、前日の休み 3日、4日、5日の空欄のセルBに 休み
と自動で文字が表示させる方法が有れば教えていただけないでしょうか。

また、休みは、1日の時もあれば続けて5日有る時もあるし、曜日も特に決まっていません。
宜しくお願いいたします。

質問者からの補足コメント

  • 有難うございます。コピー&ペーストで上手く表示できません。
    「各シートとも1行目は項目行で2行目以降にデータを入力するとします」⇦私の表では、6行目から
    1日が始まっていますので、教えて頂いたコード内の2か所の「1」を「5」に置き換えればいいのでしょうか。
    大変申し訳ありませんがよろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/04/04 09:16
  • tom04さん 有難うございます。 もう少し教えて頂けでしょうか?

    「休み」B列に表示させる事が出来ましたが、「休み」と表示された行の D列に「#VALUE!」と表示されてしまいます、この #VALUE! を表示させない方法をお願いいたします。
    今、B列に =(C6-B6)の計算式が入力されていますので、宜しくお願いいたします。

    No.5の回答に寄せられた補足コメントです。 補足日時:2018/04/04 16:16
  • すいません間違えました。 B列ではなくD列に=(C6-B6)です。
    宜しくお願いいたします。

      補足日時:2018/04/04 16:18
  • pooh2016さん 有難うございます。
    初歩的な質問で申し訳ないですが、D列6行目から始まっていますので、=IF(B1<>0,C1-B1,IF(B2<>0,"休み",""))を =IF(B6<>0,C6-B6,IF(B5<>0,"休み","")) としてD列6行に入力すればいいのでしょうか? 
    それと、今、D列6行目には、時間計算式 =(C6-B6) の計算式が入力されてますが、この2つ
    の関数式を入力するには、どのようにしたらよいのでしょうか? ただ単に、&でつなげば良いでしょうか。
    宜しくお願いいたします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/04/04 16:35
  • pooh2016さん 申し訳ありません。 補足説明違う方のところに投稿してしまいました。
    申し訳ありません。宜しくお願いいたします。

    No.4の回答に寄せられた補足コメントです。 補足日時:2018/04/04 16:36
  • pooh2016さん 有難うございます。=IF(B6<>0,C6-B6,IF(B7<>0,"休み",""))
    で上手く表示されるのですが、もう一つ教えて頂けないでしょうか?

    ここで、「休み」の表示を 色付きの文字例えば「赤色」で表示させる事はできないでしょうか。
    かって言って申し訳ありませんが、宜しくお願いいたします。

    No.8の回答に寄せられた補足コメントです。 補足日時:2018/04/05 12:05
  • pooh2016さん おはようございます。 詳しい説明をして頂いたお陰で、「休み」に色を設定する事が出来ました。有難うございます。
    すいません、もう一つだけお聞きしても宜しいでしょうか?

    ※ D列の内容を=(C6-B6)から=IF(B6<>0,C6-B6,IF(B7<>0,"休み","")) に書き換えればOKです。
    これですと、休みが一日おきの場合のみしか 休みが表示されません。
    ここで、例えば、1日が仕事で、2日、3日、4日が休みで、5日目に仕事で時間を入力したときに、
    2日、3日、4日の三ケ所に「休み」と表示させる事は出来ないでしょうか? 

    休みが 1日の時や、連続で10日有る時も有りますので、それに対応することは出来ないでしょうか。  勝手言って申し訳ありませんが、宜しくお願いいたします。

    No.9の回答に寄せられた補足コメントです。 補足日時:2018/04/06 09:28

A 回答 (10件)

確かにご指摘の通りです。


D6にこんな式を入れると
=IF(B6<>0,C6-B6,IF(B7<>0,"休み",IF(D7="休み","休み","")))
ご指摘の分は解決しますが、今度は月末に休むと”休み”が出てきません。

したがって、31日の次の行のB列(B37)に締め切りサイン(例えば1)を入れてもらうと、うまくいきます。
31日の月は32日のところに"締め切り"としてB列にサインを、30日の月には31日のところに"締め切り"とする
というように、各月ごとにシートを変えるようにするしかありません。
    • good
    • 0
この回答へのお礼

pooh2016さん いろいろ教えて頂き有難うございました。
何とか、目的通り表を作成することが出来ました。 本当に有難うございました。

お礼日時:2018/04/07 09:07

>「休み」の表示を 色付きの文字例えば「赤色」で表示させる事はできないでしょうか。



「休み」だけを赤字にするのはちょっとハードルが高くなります。
条件付き書式という技を使います。
ここで説明して、理解していただけるかわかりませんが、順を追って説明します。

・D7にカーソルを置く
・上のリボン欄に「条件付き書式」というのがあります。それをクリックします。
・プルダウンメニューに「セルの協調表示ルール」の「指定の値に等しい」を選ぶ。
・左の欄に「休み」と入れて、書式:を好みの選択にして「OK」です。
・好みの色にならなければ、「ユーザー設定の書式」を選んで、色やフォント、強調条件等を選んで、「OK」です。

あとはD列にD7のセルをコピーすればOKです。
この回答への補足あり
    • good
    • 0
この回答へのお礼

大変丁寧に説明有難うございました。 もう一つだけご無理言えないでしょうか。宜しくお願いいたします。

お礼日時:2018/04/06 09:43

No.3 です。


>D列6行目から始まっていますので、=IF(B1<>0,C1-B1,IF(B2<>0,"休み",""))を =IF(B6<>0,C6-B6,IF(B5<>0,"休み","")) 
微妙に違ってます。 式のB5→B7 です
したがって =IF(B6<>0,C6-B6,IF(B7<>0,"休み","")) です。

>今、B列に =(C6-B6)の計算式が入力されていますので、宜しくお願いいたします。 
B列ではなくD列に=(C6-B6)が入っているのですよね。

D列の内容を=(C6-B6)から=IF(B6<>0,C6-B6,IF(B7<>0,"休み","")) に書き換えればOKです。
この回答への補足あり
    • good
    • 0
この回答へのお礼

pooh2016さん有難うございます。 また一つお願いをしてしまいまして申し訳ありませんが、宜しくお願いいたします。

お礼日時:2018/04/05 12:07

何度もごめんなさい。



前回の数式では月末まであらかじめフィル&コピーしていると「0」が表示されてしまうのでは?

=IF(COUNTBLANK(B6:C6)=2,"",IFERROR(C6-B6,""))
に変更してみてください。m(_ _)m
    • good
    • 0
この回答へのお礼

tom04さん いろいろ有難うございます。目的通り出来たのですが、ファイルの保存 Excelマクロ有効ブックとして保存がうまくいきません。

ネットで色々調べるとマクロのファイルはマクロを作成したパソコンでの使用が普通みたいで、私の場合は、自宅のパソコンで作成して、職場のパソコンで使うことを目的にしていますので、今の私の知識ではこれ以上は無理と判断しました。

大変ご迷惑をおかけいたしました。本当にありがとうございました。

お礼日時:2018/04/05 12:01

>D列に「#VALUE!」と表示されてしまいます・・・



B列が「休み」の場合、D列は空白で良いのですね?
(当然C列の入力もない。)

D6セルの数式を
=IF(COUNT(B6:C6),C6-B6,"")

またはExcel2007以降であれば
=IFERROR(C6-B6,"")

にしてみてください。m(_ _)m
    • good
    • 0

No.2です。



>私の表では、6行目から・・・

1か所だけで大丈夫です、前回のコードの
>If .Row > 1 Then

>If .Row > 5 Then
に変更し、B列にデータを入力してみてください。m(_ _)m
この回答への補足あり
    • good
    • 0

>勤務表のセルの追加が必要ですが、


セルの追加は必要ないと思います。
D列の勤務時間の表示部分に"休み"と表示されるだけです。
この回答への補足あり
    • good
    • 0
この回答へのお礼

有難うございます。 時間をかけてやってみますのでお願いいたします。取り合えずお礼のみで申し訳ありません。

お礼日時:2018/04/04 09:18

簡単に作りたいのであればB列ではなく、D列に"休み"と表示されてはどうですか。


入力セルに式を入れると、入力した際に式が消されてしまいます。
それでもやろうと思えば、ほかの方の記載のように、マクロ(VBA)が必要になります。

D列に下記のような関数式を入れることで、D列を勤務時間or"休み"と表示することができます。
セル(D1)の数式 =IF(B1<>0,C1-B1,IF(B2<>0,"休み",""))
B1がブランクで、B2に何かが入力されるとD1に"休み"と表示される。

どこかに”休み”と表示されていても、集計に影響しません。
この回答への補足あり
    • good
    • 0
この回答へのお礼

pooh2016さん 有難うございます。 こんな方法も有りましたね。
勤務表のセルの追加が必要ですが、一度検討してみます。 有難うございました。

お礼日時:2018/04/03 15:11

こんにちは!



VBAになりますが、一例です。
各シートとも1行目は項目行で2行目以降にデータを入力するとします。

画面左下の操作したいシート見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)普通通り操作してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) '//この行から//
Dim c As Range, myRng As Range
If Intersect(Target, Range("B:B")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If .Row > 1 Then
If .Value <> "" Then
Set c = .End(xlUp)
Set myRng = Range(Cells(c.Row, "B"), Cells(.Row, "B"))
On Error Resume Next
myRng.SpecialCells(xlCellTypeBlanks).Value = "休み"
End If
End If
End With
End Sub '//この行まで//

※ 標準モジュールにコードを記載し、各シートのChangeイベントで標準モジュールのマクロを呼び出しても良いのですが、
結局、各シートにChangeイベントの同じコードをコピー&ペーストする必要があるので
上記コードを各シートのシートモジュールとしてコピー&ペーストしても
効率としてはあまり変わりないと思いまので、単純にシートモジュールとしてみました。m(_ _)m
この回答への補足あり
    • good
    • 0
この回答へのお礼

tom04さん 有難うございます。早速のアドバイス有難うございます。
VBAについても、全く分かりませんが、教えていただいたVBAをペーストしてみます。
取り合えず、お礼までですが、宜しくお願いいたします。

お礼日時:2018/04/03 15:06

こんんちは



>自動で文字が表示させる方法が有れば教えていただけないでしょうか。

入力対象のセルの値を制御しようという時点で、通常は関数は使えません。
(入力すると、設定してあった関数が上書きされてしまうので)
それなので、ご質問のような処理は通常はマクロ(VBA)で行うことになります。
「対象のセルの値が変わったら」というChangeイベントの発生に応じて処理をするようなタイプのマクロを設定しておくことで可能でしょう。

一方で、入力時にセル位置を間違えないという条件を設けても良いのであれば、関数でも実現は可能だと思います。
A列の対象範囲に以下の関数を設定しておくことでも実現可能だと思います。
 自身より下方のセルに、「休み」及び空白以外の値があれば「休み」を表示し、それ以外は空白を表示
    • good
    • 0
この回答へのお礼

fujillinさん 有難うございます。 申し訳ありませんが、マクロ(VBA)については、殆ど知識が有りませんし、 「自身より下方のセルに、「休み」及び空白以外の値があれば「休み」を表示し、それ以外は空白を表示」についても、どのような関数を使うかも分からない事をお詫びします。
有難うございました。

お礼日時:2018/04/03 14:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!