2011年は特に休日が土日以外に変動している会社が多いと思いますが 残念なことに Excel2010で追加された WORKDAY.INTL関数は下位のバージョンでは使えません。2003以下では WORKDAY関数自体がアドイン関数になっていて使いにくいところもありますので いっそ他の関数だけで対応させてみるのも有意義だろうと判断しました。休日が連日でない会社もあるでしょうしね。
まずはWORKDAYと同じ働きをさせる数式を考えます。とはいえ
WOKDAY関数にどこまで対応させるかによって数式の長さが全然違ってきます。完全に一緒にしようと思うと数式が長くなります。ひとまずは「日数が1〜50日まで」限定の「WORKDAY関数もどき」で考えてみましょう。なにはともあれ祝日リストは必要なので
別のシートにデータを入れて「祝日一覧」と名前定義しているものとします。祝日の作り方については「
Excel:祝祭日を計算する」を参考にして下さい。インターネットで検索して一覧表を探してきてもいいと思います。名前の定義の仕方については「
Excel:カレンダーを作る1」を参考にして下さい。
A2セル:開始日/B2セル:日数
■C2セル
=A2+SMALL(((WEEKDAY(A2+ROW($1:$100),2)>5)+COUNTIF(祝日一覧,A2+ROW($1:$100)))*100+ROW($1:$100),MAX(1,B2))
Ctrl + Shift + Enterで確定
はい。今回の場合 全て配列計算になります。「INDEX(配列,0)」で挟んで Enter確定にしてもいいですが この最も単純な計算でこの状態ですから 古いバージョンの Excelではネスト制限が心許なくなります。後で式を名前定義すればいいだけなので 今回はこの状態でいきます。
続いて「日数−50日〜50日前後」の場合の方法を書きます。
■C2セル
=A2+SMALL((WEEKDAY(A2+ROW($1:$100)*SIGN(B2),2)>5)*100+COUNTIF(祝日一覧,A2+ROW($1:$100)*SIGN(B2))*100+ROW($1:$100),MAX(1,B2*SIGN(B2)))*SIGN(B2)
Ctrl + Shift + Enterで確定
これで対応がきくはずです。対応させる日数を増やしたければ「100」のところを増やせばいい訳ですが
その分重くなっていきます。ここまではあくまで「土日祝」が休みの時のパターンですのでここから特殊な休日設定に対応させていきます。
では仮に 水曜日と日曜日と祝日のみを除いて計算したい場合を考えてみましょう。日数は「1〜50日」を前提とします。
■C2セル
=A2+SMALL((ISNUMBER(FIND(TEXT(WEEKDAY(A2+ROW($1:$100)),"aaa"),"水日"))+COUNTIF(祝日一覧,A2+ROW($1:$100)))*100+ROW($1:$100),MAX(1,B2))
Ctrl + Shift + Enterで確定
「"水日"」となっているとこで曜日を調整できます。土曜日と日曜日なら「"土日"」と入れればいいです。例によって負の日数にも対応させようと思うと
■C2セル
=A2+SMALL((ISNUMBER(FIND(TEXT(WEEKDAY(A2+ROW($1:$100)*SIGN(B2)),"aaa"),"水日"))+COUNTIF(祝日一覧,A2+ROW($1:$100)*SIGN(B2)))*100+ROW($1:$100),MAX(1,ABS(B2)))*SIGN(B2)
Ctrl + Shift + Enterで確定
更に日数の縛りを取り除くと
■C2セル
=A2+SMALL((ISNUMBER(FIND(TEXT(A2+ROW(A$1:INDEX($A:$A,ABS(B2)*2+7))*SIGN(B2),"aaa"),"土日"))+COUNTIF(祝日一覧,A2+ROW(A$1:INDEX($A:$A,ABS(B2)*2+7))*SIGN(B2)))*10^6+ROW(A$1:INDEX($A:$A,ABS(B2)*2+7)),MAX(1,ABS(B2)))*SIGN(B2)
Ctrl + Shift + Enterで確定
長い式になります。さてこれで大体の計算には対応できるはずですが まだ対応しないといけない可能性があります。