• ベストアンサー

【Excel2010】出勤日のみ表示したい

勤務時間管理表にて、現状、土日はweekday関数で翌出勤日が表示されるようにしてありますが、平日の祝日はそのセルに日付を手入力しています。祝日のある月はその作業が面倒でどうにかならないかと常々思っております。 休日&振替日一覧は作成してありますので、条件付き書式で土曜日は青文字、日曜日と休日は赤文字になるよう設定して会社休日が紛れ込んでいないか確認できるようにしてあります。 この一覧表を利用して出勤日のみを表示させる関数はありませんか?

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8477/18147)
回答No.1

E4は2019/4/25と入力して,E5に =WORKDAY(E4,1,$B$3:$B$25) と入力する。それ以降はE5をコピペ。

KO1014
質問者

お礼

ご回答ありがとうございました。 できました!! こんな便利な関数があったのですね。非常にシンプルで分かりやすい関数です。 これでしたら振替日の設定が不要なので助かります。

その他の回答 (3)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.4

>この一覧表を利用して出勤日のみを表示させる関数はありませんか? Excelに組み込まれた幾つかの関数を組み合わせれば1つの数式をオートフィルコピーして自動的に出勤日を抽出できます。 G4セルは開始日として手入力とします。 G5セルへ次の数式を設定し下へ必要数コピーします。 =MIN(INDEX(G4+ROW(G$1:G$15)+COUNTIF($B:$B,G4+ROW(G$1:G$15))*100+(WEEKDAY(G4+ROW(G$1:G$15),2)>5)*100,0)) 質問に提示の画像にはC列の振替日を提示されていますがB列に日曜日の祝日に併せて振替休日が含まれていますのでC列は無意味なようです。

KO1014
質問者

お礼

ご回答ありがとうございました。

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.3

添付図参照 G3: =H2 G4: =IFERROR(IF(IFERROR(VLOOKUP(IF(MOD(G3+1,7)=0,G3+3,IF(MOD(G3+1,7)=1,G3+2,G3+1)),B$3:C$25,2,FALSE),IF(MOD(G3+1,7)=0,G3+3,IF(MOD(G3+1,7)=1,G3+2,G3+1)))>I$2,"",IFERROR(VLOOKUP(IF(MOD(G3+1,7)=0,G3+3,IF(MOD(G3+1,7)=1,G3+2,G3+1)),B$3:C$25,2,FALSE),IF(MOD(G3+1,7)=0,G3+3,IF(MOD(G3+1,7)=1,G3+2,G3+1)))),"")

KO1014
質問者

お礼

ご回答ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

関数では難しいと感じて、参考までにVBAで。 ーー 処理ロジックは至って素直なもの。 ーー まず、祝日の一覧を手作業で作る。 例えばWEB記事の https://iko-yo.net/articles/4131 の祝日一覧をコピーし、シートのA列に貼り付け、「データ」「区切り位置」機能で、( で分ける。 1月1日 1月14日 2月11日 ・・・ 10月14日 10月22日 11月4日 11月23日 ただし、手持ちのカレンダーと2か所(振替休日か)違っていたので修正。 また、社内の特別休業日があれば(例 会社創立記念日など)付け加えれば仕舞い。 ーー 標準モジュールに Sub test01() k = 2 '書き出しをC、D列の第2行から始めるとする For i = DateSerial(2019, 1, 1) To DateSerial(2019, 1, 1) + 364 '1年分の日付について If Weekday(i) = 1 Or Weekday(i) = 7 Then '土日なら除外 Else Set x = Range("a2:A18").Find(i) '祝日テーブルにあれば除外 If Not x Is Nothing Then GoTo p1 '---C,D列に日付と曜日を書き出し Cells(k, "C") = i Cells(k, "D") = Format(i, "aaa") k = k + 1 '--- p1: End If Next i End Sub ーー 実行する。 ーー 結果 C,D列に 1月2日 水 1月3日 木 1月7日 月 1月8日 火 1月9日 水 1月10日 木 1月11日 金 以下略 ーー 1月分(2,3カ月分)などの場合は DateSerial(2019, 1, 1)  と DateSerial(2019, 1, 1) + 364  の部分を書き換えればできる。 書き出す列を好みの列にするのは、上記のC,Dの箇所を修正するだけ。

KO1014
質問者

お礼

ご回答ありがとうございました。

関連するQ&A