[[20240709155852]] 『基準から土日祝を除いた営業日数を表示させる関数』(NK) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『基準から土日祝を除いた営業日数を表示させる関数』(NK)

カレンダー表の作成作業に置いて
基準から土日祝を除いた営業日数を表示させる関数を作成したいのですが、難航しています。(日付ではありません)

・基準日:毎月25(土日祝なら前営業日)
・祝日:別シート「祝日」のA列に日付を記載
・当月基準日以降は、次月基準日から営業日数を計算

下記例でいうB列「営業日数」に数字を表示させたいです。

日付(A)     営業日数(B)
2024/8/16金   6
2024/8/17土 
2024/8/18日
2024/8/19月   5
2024/8/20火   4
2024/8/21水   3
2024/8/22木   2
2024/8/23金   1
2024/8/24土 
2024/8/25日        ※8月基準日
2024/8/26月   20   ※9月の基準日(25日)から営業日を計算

どなたかお詳しい方いらっしゃいましたら、ご教授いただけないでしょうか。

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


 1行目が見出しで2行目からデータだとして。
 B2セルに
 =IF(OR(WEEKDAY(A2,2)>5,COUNTIF(祝日!A:A,A2)),"",NETWORKDAYS(A2,IF(DAY(A2)<=DAY(WORKDAY(DATE(YEAR(A2),MONTH(A2),26),-1,祝日!A:A)),WORKDAY(DATE(YEAR(A2),MONTH(A2),26),-1,祝日!A:A),WORKDAY(DATE(YEAR(A2),MONTH(A2)+1,26),-1,祝日!A:A)),祝日!A:A))
 ではどうだろうか?

 現在2016で式をたてているため、365であればもっと簡潔にできるだろう。
(ねむねむ) 2024/07/09(火) 16:32:02

 例示の8/26は営業日数 20 になってますけど、「21」では?

 B2 =LET(s,祝日!$A$2:$A$100,IF(A2="","",IF(WORKDAY(A2-1,1,s)>A2,"",NETWORKDAYS(A2,WORKDAY(EOMONTH(A2-25,0)+26,-1,s),s))))

 8/26以外は例示通りになりますけど・・・

 参考まで
(笑) 2024/07/09(火) 16:34:22

すみません、正しくは下記でした…

日付(A)     営業日数(B)
2024/8/16金   5
2024/8/17土 
2024/8/18日
2024/8/19月   4
2024/8/20火   3
2024/8/21水   2
2024/8/22木   1
2024/8/23金   0
2024/8/24土 
2024/8/25日        ※8月基準日
2024/8/26月   20   ※9月の基準日(25日)から営業日を計算
(NK) 2024/07/09(火) 17:20:38


 求めたい結果に1を足した結果が出るのだから1を引けば?
(ねむねむ) 2024/07/09(火) 17:28:05

いただいた関数を参考に設定しましたが、
「基準日:毎月25(土日祝なら前営業日)」が0になりませんでした。

=IF(OR(WEEKDAY(A3,2)>5,COUNTIF(祝日!$A:$A,A3)),"",NETWORKDAYS(A3,IF(DAY(A3)<=DAY(WORKDAY(DATE(YEAR(A3),MONTH(A3),$K$1),-1,祝日!$A:$A)),WORKDAY(DATE(YEAR(A3),MONTH(A3),$K$1),-1,祝日!A:A),WORKDAY(DATE(YEAR(A3),MONTH(A3)+1,$K$1),-1,祝日!$A:$A)),祝日!$A:$A))

$K$1=25
(NK) 2024/07/09(火) 17:33:57


 当方の式は試す気もないんですか・・・

 B3 =LET(s,祝日!$A$2:$A$100,IF(A3="","",IF(WORKDAY(A3-1,1,s)>A3,"",NETWORKDAYS(A3,WORKDAY(EOMONTH(A3-$K$1,0)+$K$1+1,-1,s),s)-1)))

 質問者以外の方の参考にでもなれば
(笑) 2024/07/09(火) 18:00:22

卑屈すぎてうける
(NK) 2024/07/10(水) 09:40:50

 笑さん提案の式で計算できていることを確認しました。
 笑さんの式を参考にしながら、自分の頭の中の整理のためのメモです

 ・基準日は、指定に日の次の25日として、これは以下の式で計算
   =EOMONTH(日,IF(DAY(日)>25,0,-1))+25

 ・もし25日が土日祝なら前営業日にするとの条件は
   NETWORKDAYS関数を使うのであれば、土日祝はカウントしないので、
   計算上はこの条件を無視して25日を基準日として計算してよい

 ・NETWORKDAYS関数は、
   =NETWORKDAYS("2024/7/10","2024/7/10") の結果が1になるような計算をする(平日の初日を算入する)
   ので、基準日当日を 0 にするような計算結果にするため、NETWORKDAYS関数の結果から1を減じる

  準備(1) 祝日が入力されたているセル範囲に 祝日リスト と名前をつける
 準備(2) =LAMBDA(日,EOMONTH(日,IF(DAY(日)>25,0,-1))+25) という式に基準日という名前をつける
 準備(3) =LAMBDA(日,WORKDAY(日-1,1,祝日リスト)<=日) という式にIsWORKDAYという名前をつける 

  以上の準備のもとで、
  =IF(IsWORKDAY(A3), NETWORKDAYS(A3,基準日(A3),祝日リスト)-1,"")
  で結果が求められました
(´・ω・`) 2024/07/10(水) 15:58:45

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.