• 締切済み

Excelの関数(IF関数?)

始めまして。 関数が苦手なのですが、仕事で至急表を作成しなければならなくなって しまい困っています。作成したいエクセルの表は下記の通りです。 受注日の管理で関数を使って出荷日の自動計算をしたいと思っています。 例えば2009/1/15のPMまでに受注したものに関しては当日出荷で After5以降での受注は翌日出荷扱いでエクセルの表に表示したいのです。 今現在、 セルA1に日付(2009/1/15 )   B1に時刻(AM、PM、After5で区分)←ラジオボタンで選択出 となっています。 これから関数を組んで自動的に A2でAM、PMを選んだ場合、 セルC1の日付(2009/1/15) D1ではセルB1と同じものを表示(AMもしくはPM) セルB1でAfter5を選んだ場合のみ C1の日付は翌日扱い(土、日、祝日を除く)で D1の時間区分は空白にしたいと思っています。 どんな関数を組めば良いでしょうか? 分かりづらい説明で申し訳ございませんが、お知恵をお貸し頂けたら 幸いです。 宜しくお願い致します。

みんなの回答

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.8

昨日は仕事の合間をぬって回答していました。 (現在もそうですが..) うっかりミスを連発しましたことを お詫びします。 $のつけ方も逆の部分があったので、 修正と解説をさせていただきます。 _____A____B_____C__D_____E_ 1_2009/2/9_After5_2009/2/12_AM__2009/1/1_ 2__________________2009/1/12_ 3__________________2009/2/11_ 4__________________2009/3/20_ 5__________________2009/4/29_ C1 =WORKDAY(A1+(B1="After5"),1,E$1:E$30) 下方向・↓ D1 =IF(B1="After5","AM",B1) 下方向・↓ =WORKDAY(【基準日はいつ?】,【それから休日はとばして何日後?】,【土日以外の祝日表はどこ?】) です。 ・B1がAM,PMの場合 =WORKDAY(A1,1,E$1:E$30)・・・ア これでA1の翌営業日になりますね。 ・B1がAfter5の場合 =WORKDAY(A1+1,1,E$1:E$30)・・・イ まずはとにかくA1+1と、A1の翌日を基準日にしてしまいます。 それが何曜日であろうと関係ありません。 そしてWORKDAY( ,1,E$1:E$30)で囲めば、 そのまた翌営業日となり、今度は土日祝日をとばします。 つまり、2段階で2日後の営業日としています。 ・アイをひとまとめにするために、形を近づけます。 ┌B1がAfter5の場合WORKDAY(A1+1,1,E$1:E$30) └そうではない場合WORKDAY(A1+0,1,E$1:E$30) ・+1,+0の違いだけですね。 場合分けですので、IF関数の出番です。 ┌B1がAfter5の場合+1 └そうではない場合-1 →IF(B1="After5",1,0)とまとめられます。 つまり WORKDAY(A1+IF(B1="After5",1,0),1,E$1:E$30) とまとめられるわけです。 ※なお、足し算などの演算式の中に(B1="After5") の形を無理やり入れると、 ( )の中が正→TRUE→1[演算式の中では] ( )の中が負→FALSE→0[演算式の中では] とExcelが翻訳するので、 +IF(B1="After5",1,0)のかわりに +(B1="After5")とズルをすることもあります。 なんのことはない、+1または+0の代わりだと思ってください。

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.7

完全に間違えました。 =WORKDAY(A1+($B1="After5"),1,$E1:$E30) が正しいです。下の式、無視してください。 ごめんなさい。

chocola09
質問者

お礼

まとめてのお礼で失礼します。 こんなに短縮した数式で出来るんですね@o@; ・・・関数ニガテな私には数式の意味はチンプンカンプンですが^^; 本当にご丁寧に教えて頂き感謝しております!! ↑の数式で一覧表作ってみます☆ 又、早速の再回答を頂いていたのに返答が遅くなりまして 大変申し訳ありませんでした。 本当に助かりました!!! 自分でも理解出来る様にExcelの本片手にn_na_ttoさんから 教えて頂いた数式の意味(?!)を勉強してみます☆

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.6

もっと短く。 =WORKDAY(A1,1+($B1="After5"),$E1:$E30) それから、After5でも、翌日が休みの場合 平日の1日を飛ばしてそのまた次の日に なってしまうと思います。 とりあえず条件をいろいろ考えてください。

chocola09
質問者

補足

>After5でも、翌日が休みの場合 >平日の1日を飛ばしてそのまた次の日に >なってしまうと思います。 はい!! それで大丈夫です☆ 説明不足の中、簡潔な数式を考えて頂き有難うございました。 大変助かります!!

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.5

C1 =IF($B1="After5",WORKDAY(A1,2,$E1:$E30),WORKDAY(A1,1,$E1:$E30)) D1 =IF($B1="After5","AM",B1) D列の条件おかしくないですか? 現在は AM→翌日のAM PM→翌日のPM After5→2日後のAM ですが、なんとなく AM→翌日のAM PM→翌日のAM★ After5→2日後のAM ★が正しいのではないですか?

chocola09
質問者

補足

度々のご回答有難うございます☆ ご指摘頂いた件ですが、 AM受け付けた発注については翌日AM発送 PM(5時まで)に受け付けた発注については翌日PM発送 After5に受け付けた発注については翌々日のAM発送なんです。 分かりづらい説明で、「教えて下さい ><」なんて書いてしまい 申し訳ありませんmuum

  • n_na_tto
  • ベストアンサー率70% (75/107)
回答No.4

ツール →アドイン →分析ツール にチェックを入れて E列に祝日を入力 ______A____B_____C_D_____E_ 1_2009/2/10_After5_2009/2/12___2009/1/1_ 2__________________2009/1/12_ 3__________________2009/2/11_ 4__________________2009/3/20_ C1 =IF($B1="After5",WORKDAY(A1,1,$E1:$E30),A1) 下方向・↓ D1 =IF($B1="After5","",B1) 下方向・↓

chocola09
質問者

お礼

早速のご回答有難うございます!! 図解まで入れて頂き有難うございます。 この数式を入れると祝祭日も関数に反映されますね☆ なるほど。。(←・・・って全然分かっていないですが(汗)) ・・・そして折角、ご回答頂いたのですが質問に誤りがありました。。 (たった今、判明。。。) すみません>_< AM、PMで受注した物に関しては当日発送ではなく翌日発送、After5で受注した物に関しては翌々日発送(土・日・祝祭日除く)。そしてAfter5で受注した物に関してのD1の時間区分はAMになる様にと、たった今上司から言われました(泣)。。 大変、お手数ではございますが今一度お知恵を拝借出来たら幸いです。 もし、お時間がある様でしたらこちらの条件での数式も教えて頂けませんでしょうか?>_<

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.3

ごめんなさい。 C1セル =IF(B1="After5",A1+IF(WEEKDAY(A1)=7,2,1)),A1) でしたね。

chocola09
質問者

お礼

再度回答有難うございます!!

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.2

C1 セルには、・・・ =IF(B1<>"After5",A1,IF(WEEKDAY(A1+1,2)<6,A1+1,A1+3)) D1 セルには、・・・ =IF(B1<>"After5",B1,"") なお、祝祭日は関数では判断できないので、別途、祝祭日の一覧表を作成し、翌日の日付がこの祝祭日一覧表にないことをチェックする関数を考える必要があります。

chocola09
質問者

お礼

早速のご回答有難うございます! ふむふむ。。。 やっぱり祝祭日を関数に反映させる事は無理っぽいですね↓↓ 早速のご回答、大変助かりました☆

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.1

Excelでは、まずこれが出来ません。 >C1の日付は翌日扱い(土、日、祝日を除く)で 要は「祝日」の概念が無いのです。おまけに例えば12/31や1/2,3は 祝日ではないのですが、大概の企業はお休みです。 ですので、祝日は事前にリストにして除外処理をしなければなり ませんが、これが結構大事なんです。専用のフリーソフトとして kt関数アドインってのがありますが、結構使い方が難しいですし。 いちおう、祝日は無視するなら、 C1セルは =IF(B1="After5",A1+IF(WEEKDAY(A1)=1,2,1)),A1) D1セルは =IF(B1="After5","PM",B1) こんな感じで行けると思います。 WEEKDAY関数は、日曜が「1」、月曜が「2」・・・土曜が「7」 ですので、土曜なら無条件に2日後にすればいいわけです。

chocola09
質問者

お礼

早速のご回答有難うございます。 祝日や翌日扱いの概念が無いのですね。。。 kt関数アドインっていうのも私にとっては難しそう^^; >WEEKDAY関数は、日曜が「1」、月曜が「2」・・・土曜が「7」 こんなに細かい解説まで頂き感謝です。 こんな短時間で親切に数式を考えて頂き本当に有難うございました!! 大変助かりました☆

関連するQ&A