• ベストアンサー

日にちのカウントダウン関数を教えて下さい。

8月1日~8月31日までの休日を除いた日数をカウントダウンする関数を教えて下さい。 尚、2011/8/10~2011/8/16が夏季休暇及び2011/8/3、2011/8/17、2011/8/24、2011/8/31を定休日と して本日2011/8/19日現在で稼働日数、経過日数、残り日数を自動で表示出来ないでしょうか。 例)稼働日20日、経過日数10日、残り日数10日

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

式が複雑になりますので作業用のシートを用意して対応することにします。 シート1はお求めの表で例えばA1セルには本日と文字列を入力し、B1セルには8/19と入力してもよいですが本日の日付を自動で表示させるのでしたらB1セルには次の関数を入力します。 =TODAY() A2セルには今月の稼働日数、A3セルには経過日数、A4セルには残り日数とそれぞれ文字列を入力し、それらの行のB列にお求めの数値を表示させることにします。 そこで作業用のシートですが例えばシート2のA列には夏季休暇、定休日、祝日などの日付を入力します。 C列にはその月の日付を自動的に表示させます。そのためにはC1セルに次の式を入力して下方にオートフィルドラッグします。 =IF(Sheet1!$B$1="","",IF(MONTH(DATE(YEAR(Sheet1!$B$1),MONTH(Sheet1!$B$1),ROW(A1)))<>MONTH(Sheet1!$B$1),"",DATE(YEAR(Sheet1!$B$1),MONTH(Sheet1!$B$1),ROW(A1)))) 勿論、シート1のB1セルの日付が8月から9月というように変わった場合でもその月の初めから月末までの日付が表示されます。なお列を選択してセルの表示形式は日付にします。 シート2のD1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(C1="","",TEXT(C1,"aaa")) E1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(C1="",D1="日",COUNTIF(A:A,C1)>0),"",1) 以上のようにシート2での作業が終了してからシート1に戻ってB2セルには次の式を入力します。 =IF(B1="","",SUM(Sheet2!E:E)) B3セルには次の式を入力します。 =IF(B1="","",SUM(INDEX(Sheet2!E:E,1):INDEX(Sheet2!E:E,MATCH(B1,Sheet2!C:C,0)))) B4セルには次の式を入力します。 =IF(B1="","",B2-B3)

tukemi
質問者

お礼

早々のご回答をありがと御座いました。 大変、分かり易く実用的で早速使用させて頂きました。

その他の回答 (1)

  • minosennin
  • ベストアンサー率71% (1366/1910)
回答No.1

一例です。 D1に月初日2011/8/1  D2に月末日2011/8/31 があり、 以下休日が E2に2011/8/3 E3に2011/8/10 E4に2011/8/11 E5に2011/8/12 E6に2011/8/13 E7に2011/8/14 E8に2011/8/15 E9に2011/8/16 E10に2011/8/17 E11に2011/8/24 E12に2011/8/31 にあるものとします。 稼働日 =DATEDIF(D$2,D$3,"d")+1-COUNTIFS($E$2:$E$12,">="&$D$2,$E$2:$E$12,"<="&$D$3) 経過日数 =DATEDIF(D$2,TODAY(),"d")+1-COUNTIFS($E$2:$E$12,">="&$D$2,$E$2:$E$12,"<="&TODAY()) 残り日数 =DATEDIF(TODAY(),D$3,"d")-COUNTIFS($E$2:$E$12,">="&TODAY(),$E$2:$E$12,"<="&$D$3) 1,2番目の式中+1するのは初日不算入を補正するためです。残日数は当日を入れないので補正不要。 なお、他の月でも旨く行くかどうかは未確認です。もしこれを使われるときは十分チェックの上使ってください。

tukemi
質問者

お礼

早々のご回答をありがとうございました。 私は関数の初心者で回答頂いた関数を早速エクセルに落とし込み検証させて頂きましたが うまくいきませんでした。私の力量不足と痛感しております。 もし、補足があればご教授頂ければ幸いに存じます。

関連するQ&A