- ベストアンサー
【Excel2010】出勤日のみ表示したい
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
E4は2019/4/25と入力して,E5に =WORKDAY(E4,1,$B$3:$B$25) と入力する。それ以降はE5をコピペ。
その他の回答 (3)
- bunjii
- ベストアンサー率43% (3589/8249)
>この一覧表を利用して出勤日のみを表示させる関数はありませんか? 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列は無意味なようです。
お礼
ご回答ありがとうございました。
- msMike
- ベストアンサー率20% (364/1804)
添付図参照 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)))),"")
お礼
ご回答ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
関数では難しいと感じて、参考までに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の箇所を修正するだけ。
お礼
ご回答ありがとうございました。
お礼
ご回答ありがとうございました。 できました!! こんな便利な関数があったのですね。非常にシンプルで分かりやすい関数です。 これでしたら振替日の設定が不要なので助かります。