- ベストアンサー
EXCELでの日付の表示で、
yy/mm/ddのX日後が、土日祝日だった場合、 (1)その前日を表示する (2)その後日を表示する には、どうしたらいいか教えてください。 (x日後が平日だった場合は、その日を表示) EXCEL2000を使っています。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
面倒くさいので祝日リストを省略し、開始日が当然平日だっていう前 提で考えますが、 X日後が休みの日だったら直前の平日にする =workday(開始日, networkdays(開始日,開始日+X)-1) いや、直後の平日にする =workday(開始日, networkdays(開始日,開始日+X-1)) こんな感じ。それぞれ第3パラメータに祝日リストの範囲を指定すれ ば、祝日も除外します。
その他の回答 (3)
- oresama
- ベストアンサー率25% (45/179)
WORKDAY関数を使用しない場合、 どこかに祝日リスト(yy/mm/dd形式で縦一列)を作っておいて、 VLOOKUP関数等で祝日判定を行います。 (1)の場合、基準日をA1、Xの値がB1とすると、 =if(and(iserror(vlookup(a1+b1,"祝日リスト",1,0),weekday(a1+b1,2)<6),a1+b1,a1+b1-1) ※"祝日リスト"は該当部分のセル参照でもよい。 でX後日が土日祝日でなければ、その前日(a1+b1-1) を返します。 当然(a1+b1-1)も土日祝日の可能性もあるので、 =if(・・・・・,if(・・・・)) という形で (a1+b1-1)が土日祝日であれば、(a1+b1-2) を返すようにします。 日本の土日祝日であれば、最大5連休程度なので、 これを6回繰り返すようにするか、 どこか任意の6つのセルに、 =if(and(iserror(vlookup(a1+b1,"祝日リスト",1,0),weekday(a1+b1,2)<6),a1+b1,0) =if(and(iserror(vlookup(a1+b1-1,"祝日リスト",1,0),weekday(a1+b1-1,2)<6),a1+b1-1,0) =if(and(iserror(vlookup(a1+b1-2,"祝日リスト",1,0),weekday(a1+b1-2,2)<6),a1+b1-2,0) =if(and(iserror(vlookup(a1+b1-3,"祝日リスト",1,0),weekday(a1+b1-3,2)<6),a1+b1-3,0) =if(and(iserror(vlookup(a1+b1-4,"祝日リスト",1,0),weekday(a1+b1-4,2)<6),a1+b1-4,0) =if(and(iserror(vlookup(a1+b1-5,"祝日リスト",1,0),weekday(a1+b1-5,2)<6),a1+b1-5,0) =if(and(iserror(vlookup(a1+b1-6,"祝日リスト",1,0),weekday(a1+b1-6,2)<6),a1+b1-6,0) と仕込んで、MAX関数で最大値を引き当てる方法もあります。 (2)は-1とか-2を+1とか+2に置換してください。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 基準日が祝日・平日に限らず、 (1)は、 =WORKDAY(A1+B1+1,-1,祝日一覧) で、(2)は、 =WORKDAY(A1+B1-1,1,祝日一覧) です。 (A1に基準日、B1にxの値を入力するとします。)
- mu2011
- ベストアンサー率38% (1910/4994)
(2)ならば「WORKDAY」関数(アドインで分析ツールをチェック要)で可能ですが、(1)は関数もありませんのでので、VBAしかないと思います。