- ベストアンサー
エクセル ある条件で出荷日を算出したい。
以下の条件で、出荷日を算出したいと思っております。 ・平日に着日が指定されている。 ・送り先ごとに配送日数が異なる。 ・出荷作業ができるのは平日のみ ・荷物は土日に関係なく輸送される。 たとえば、着日が8/4(木)で中4日間で届くとしますと、発送日は7/30(土)ですが 出荷は平日しかできないので発送日を7/29(金)としたい。 出荷が平日限定、しかし土日でも荷物は移動するという条件が うまく裁けません。 どなたかお知恵を拝借したいと思います。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17069)
出荷作業(平日) 輸送開始(出荷即日) 輸送作業(土日とか休みなし) 到着は到着指定日当日のみ(それ以前の到着不可?いやありえるよね。到着相手の都合は書いてないから。ひょっとすると同会社の営業所・恒常化も) 到着必要日ー所要日数を計算すれば良いが、出荷が土日に行われないので、結果の日が土日なら前日に前倒し。 ーー A1ーー到着必要日 B1--所要日数 ーーー 祝日のことを質問で、全く触れてないが、祝日も出荷しないのだろうね。 ーー こういう課題は場合(月日のあり場所)によって結果を変えないといけないので、関数では苦手なタイプと思う。 ーー VBAを使うか、VBAを使ったユーザー関数で対処すべき課題と思う。常時、エクセル関数に関心を持って、クイズを解くように訓練している(していた)人を除いて。 ーー ただし、エクセルにはアドイン関数だが、WORKDAY関数というのがある。 WORKDAY(開始日、日数、祭日)という引数内容で、 日数は本件の場合マイナスで指定します。 祭日のカレンダーは{"3/3/11","18/7/11"} のように列挙する。 1日の場合はそのまま","18/7/11"と書ける。 他にセル範囲も指定できる。 しかしこれは輸送日数とか製造日数とか、休みの日には進行が止まる場合に使える関数で本件では、輸送は休みの日も行われるから、そのまま普通には使えない。 其れで テストデータ A列とB列、C列、D列 様子を見るためA列は連続日にした。 B列は様子を見るため1定にした。 D列は式を少し変えた結果。こちらが望みの日付かもしれない。 2011/8/4 4 2011/8/1 2011/7/29 2011/7/19 4 2011/7/15 2011/7/15 2011/7/20 4 2011/7/15 2011/7/15 2011/7/21 4 2011/7/15 2011/7/15 2011/7/22 4 2011/7/19 2011/7/15 2011/7/23 4 2011/7/20 2011/7/19 2011/7/24 4 2011/7/21 2011/7/20 2011/7/25 4 2011/7/22 2011/7/21 2011/7/26 4 2011/7/22 2011/7/22 2011/7/27 4 2011/7/22 2011/7/22 2011/7/28 4 2011/7/25 2011/7/22 2011/7/29 4 2011/7/26 2011/7/25 2011/7/30 4 2011/7/27 2011/7/26 2011/7/31 4 2011/7/28 2011/7/27 2011/8/1 4 2011/7/29 2011/7/28 ーー C1に式 =workday(A1-(B1-2),-1,{"2011/7/18"}) または C1に式 =workday(A1-(B1-1),-1,{"2011/7/18"}) 4日の解釈によりどちらが良いか。質問例では後者か? ,{"2011/7/18"})は微視的に7/18の祝日だけに絞ったが、年間なら増やしてください。年々祝日が変わるので、シートの データか式の変更が必要ないやなケースだ。 ーーー やっていることは到着日より(必要日数-1日)前を計算(単純にカレンダー上の計算、引き算。その間は輸送が行われるから)、し、その後、-1すなわち前日というところで、WORKDAY関数を効かせている。 ==== 私の勘違いや、そっくりの回答が既に出ておれば、すみません。 結構ややこしくて、時間をとったので、VBAでの回答は略。
- KURUMITO
- ベストアンサー率42% (1835/4283)
例えばシート1で発送日がA2セルから下方に表示されるとします。B2セルから下方には配送日数を入力するとします。C2セルには着日を入力するとします。 シート2のA1セルから下方には祝祭日などが入力されているとします。 そこで着日や配送日数を入力して発送日を祝祭日を除く平日にするのでしたらA2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNT(B2:C2)<>2,"",WORKDAY(C2,-B2,Sheet2!A:A)) なお、着日が確実に祝祭日を除く平日だけが入力できるようにするためにはC2セルから下方の行を範囲として選択してから「ホーム」タブの「条件付き書式」で「新しいルール」をクリックします。「数式を使用して…」を選択して数式の窓には次の式を入力します。 =AND(WEEKDAY(C2,2)<6,COUNTIF(Sheet2!A:A,C2)=0) これでC列に間違った日にちが入力されるのを防ぐことができます。
- molly1978
- ベストアンサー率33% (393/1186)
着日をA1、発送日数(中日数)をB1とすると、 =IF(WEEKDAY(A1-B1)=1,A1-B1-3,IF(WEEKDAY(A1-B1)=7,A1-B1-2,A1-B1-1))
- mshr1962
- ベストアンサー率39% (7417/18945)
例 Z1:Z100に祝日の一覧(今月なら2011/7/18)がある A1に着日 A2に配送日数 A3に出荷日として A3=IF(COUNT(A1:A2)<2,"",WORKDAY(A1-A2,IF(OR(WEEKDAY(A1-A2,2)>5,COUNTIF($Z$1:$Z$100,A1-A2)),-1,0),$Z$1:$Z$100)) ※WORKDAY関数を使っているので、エラーが出る場合「ツール」「オプション」「アドイン」内の 「分析ツール」にチェックが必要です。
- gyouda1114
- ベストアンサー率37% (499/1320)
WORKDAY関数でいけませんか 着 日 C2に2011/8/4 発送日 =WORKDAY(C2,-4) WORKDAY関数の使い方(指定した稼働日数後の日付を求める関数) http://maglog.jp/excel/Article274171.html
お礼
maron--5さん ありがとうござます。ほぼ望み通りです。ありがとうございます。 WORKDAY(A2-(B2-1),-1,祝日)) を WORKDAY(A2-(B2),-1,祝日)) にすると こちらの思った通りの日付となりました。 必要条件と真っ向勝負しすぎて頭が混乱していました。着日と出荷日の間の土日の数を カウントして・・・ウンヌンカンヌン・・・。 ホッとしました。