- ベストアンサー
エクセルで土日祝日を除く日付の表示方法は
あるセルに「平成16年2月2日」と入力されており、この日付から14日以内の日付(土日、祝日を除く)を表示する方法は 表示例) 平成16年2月2日 平成16年2月3日 平成16年2月4日 平成16年2月5日 平成16年2月6日 平成16年2月9日 平成16年2月10日 平成16年2月12日 平成16年2月13日 出来れば最終的には一つのセルに表示したいです(希望)
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#2のmshr1962です。 >入力規則のリストを使用すると空白のセルを選択できることになります。 直接でなく入力規則のリストで使うのですか?それなら A列に祝日のリストを作る。(振替休日も用意してください) B列の先頭に基準になる日(今日現在なら=TODAY()) B2に=B1+1としてB14までコピー C列で土日と祝日の判定 =IF(AND(ISERROR(MATCH(B1,$A$1:$A$30,0)),WEEKDAY(B1,2)<6),B1,"") D列で整列 =IF(ISERROR(SMALL($C$1:$C$14,ROW())),"-",SMALL($C$1:$C$14,ROW())) D列を名前定義して入力規則の元の値に入力してください。 土日祝日の分は"-"が表示されます。
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17069)
祝日を除外するのは、VBAでないと難しい。 >最終的には一つのセルに表示したいです これも関数式だと複雑になりすぎる。 ’----- 土日除きの14日間は A1に指定日付 E列に E1は=A1 E2は=$E$1+ROW(E2)-1、E3以下に複写。 F1に=IF(WEEKDAY(E1,2)>5,"",WEEKDAY(E1,2)) F2以下に複写 G1に=COUNT($F$1:F1) G2以下に複写 B1に=INDEX($E$1:$E$20,MATCH(ROW(A1),$G$1:$G$20,0)) B14まで複写。 (テスト)A1:B14は下記。B列が求める日付14日分。 A列 B列 2004/3/25 2004/3/25 2004/3/26 2004/3/29 2004/3/30 2004/3/31 2004/4/1 2004/4/2 2004/4/5 2004/4/6 2004/4/7 2004/4/8 2004/4/9 2004/4/12 2004/4/13 E1:G21は下記になる。 E列 F列 G列 2004/3/25 4 1 2004/3/26 5 2 2004/3/27 2 2004/3/28 2 2004/3/29 1 3 2004/3/30 2 4 2004/3/31 3 5 2004/4/1 4 6 2004/4/2 5 7 2004/4/3 7 2004/4/4 7 2004/4/5 1 8 2004/4/6 2 9 2004/4/7 3 10 2004/4/8 4 11 2004/4/9 5 12 2004/4/10 12 2004/4/11 12 2004/4/12 1 13 2004/4/13 2 14 2004/4/14 3 15
- mshr1962
- ベストアンサー率39% (7417/18945)
#2のmshr1962です。 =WORKDAY(開始日,終了日,祝日) ですが祝日の部分は {"2004/2/11","2004/3/20"} のようにするか、祝日を入力した範囲のセル座標(A1:A20)で大丈夫です。 ただWORKDAY関数は日数を計算する関数ですが...
補足
WEEKDAYの間違いでした。
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
分析ツールをインストールしてあればworkday()関数で土日祝日を除 外できます。A1が2月2日として、 A2: =workday(A1,1,祝日リストの範囲) ですね。そこにif()関数で無様な判定をして14日以内の条件を満足さ せればオッケーでしょう。
補足
分析ツールはインストールしてあります。 ここに質問をする前にworkdayを使用したのですが、「祝日リストの範囲」の意味が理解できませんでした。 祝日リストの範囲とはどのように指定するのでしょうか
- mshr1962
- ベストアンサー率39% (7417/18945)
土日だけでいいなら =A1+CHOOSE((WEEKDAY(A1),1,1,1,1,1,3,2) として下にコピーすれば A1が金土日の場合次のセルは月曜日になります。 祝日の場合は振替休日等があるためVBA(マクロ)でないと難しいと思います。 飛ばすのではなく色を付けるなら対応法は有ります。
- w-inty
- ベストアンサー率33% (76/227)
vbaでやった方が簡単なんですが、あえて関数で。 A2に2月2日がはいっていて、A3、A4と続けるものとします。 A3には =IF(WEEKDAY($A$2+1)=7,"",IF(WEEKDAY($A$2+1)=1,"",$A$2+1)) と入れればOKです。 A4は =IF(WEEKDAY($A$2+2)=7,"",IF(WEEKDAY($A$2+1)=2,"",$A$2+2)) これを任意の数分コピーすればOKです。 最後にこれを&か何かで一つのセルに入力すればいいのでは? vbaの方がよかったらまたきいてください。
補足
・教えて頂いた方法ですと16年2月11日(祝日)が表示されてしまいます。祝日の処理はどうするのでしょうか。 ・入力規則のリストを使用すると空白のセルを選択できることになります。(空白を選択したくありません) 今回の場合はVBAのほうが良いのでしょうか
お礼
ありがとうございます 過去の質問のカレンダーと今回の回答を組み合わせて、ほぼ思うように出来ました。