こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2019-06-14 12:14:15

QNo.9625726

困ってます

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

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

投稿日時 - 2019-06-14 12:42:51

お礼

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

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

投稿日時 - 2019-06-17 08:05:17

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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列は無意味なようです。

投稿日時 - 2019-06-15 08:55:15

お礼

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

投稿日時 - 2019-06-17 08:05:51

ANo.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)))),"")

投稿日時 - 2019-06-14 17:20:42

お礼

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

投稿日時 - 2019-06-17 08:05:43

ANo.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の箇所を修正するだけ。

投稿日時 - 2019-06-14 16:03:46

お礼

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

投稿日時 - 2019-06-17 08:05:34

あなたにオススメの質問