- 締切済み
指定日を求めるエクセル関数を教えてください。
セルA1へ集金日を入力すると、B1へ処理日を自動で表示させたいのですが、例えば、 H18.12.26からH19.1.25までに集金がおこなわれたら処理日はすべてH19.2.10 H19.1.26からH19.2.25までに集金がおこなわれたら処理日はすべてH19.3.10 セルA1(集金日) H19.1.1 セルB1(処理日) H19.2.10 日付範囲の条件により指定日を求めたいのですが、よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- p-applepie
- ベストアンサー率53% (156/290)
#1です。 また見落としがあったみたいですね。 vizzarさん、ご指摘ありがとうございます。 =IF(DAY(A1)<26,DATE(YEAR(A1),MONTH(A1)+1,10),DATE(YEAR(A1),MONTH(A1)+2,10)) で 翌々月10日になります。
#2です。 #1さんの式では、H18.12.26だと処理日がH19.1.10になってしまいます。 26日から月末までの日付の場合は翌々月の10日を処理日にしたいのですから... しかしながら、私の式も、 =DATE(YEAR(A1),MONTH(EDATE(A1,1+IF(DAY(A1)>締め日,1,0))),10) で充分でしたね。 IF関数を使うとき、計算式の一番外側で使ってしまいがちですが、 中の方でデータを切り替える為に使った方が、式全体がすっきりすることが多いです。 IFを使わないのであれば、 =DATE(YEAR(A1),MONTH(EDATE(A1,1+(DAY(A1)>締め日))),10) でOKです。 (DAY(A1)>締め日)は、26日以降なら「1」、そうでないなら「0」となるので、そのまま数値として使えます。 このように比較演算を括弧でくくれば、そのまま「0」あるいは「1」として評価されます。
- p-applepie
- ベストアンサー率53% (156/290)
#1です。 すみません。締め日が25日だと勘違いしていました。 10日の場合は ↓の通りにしてください =IF(DAY(A1)<26,DATE(YEAR(A1),MONTH(A1),10),DATE(YEAR(A1),MONTH(A1)+1,10))
お礼
お礼がおくれて申し訳ありません。 早速試してみます。 いろいろなパターンがあったので、回答が複数得られて大変助かります。ありがとうございました。
要は、締め日が25日で、処理日が締め日の翌月10日ですよね。 =DATE(YEAR(EDATE(A1,1+IF(DAY(A1)>締め日,1,0))),MONTH(EDATE(A1,1+IF(DAY(A1)>締め日,1,0))),10) で如何でしょう。 DATE関数でYEARの部分もいじっているのは、12月のときの対応です。 ただしEDATE関数は、「ツール」-「アドイン」で「分析ツール」にチェックを入れないと使えません。 また、「挿入」-「名前」-「定義」で、 「名前」に"締め日"、「参照範囲」に"=25"を設定しておき、上記のような数式に名前を使うことができ、 今後、締め日が変更された場合、この名前の「参照範囲」を一カ所変更するだけで済みます。 それに、数式が何をしているのか解りやすくなるという利点もあります。
- p-applepie
- ベストアンサー率53% (156/290)
B1セルに =IF(DAY(A1)<26,DATE(YEAR(A1),MONTH(A1),25),DATE(YEAR(A1),MONTH(A1)+1,25)) でいかがでしょうか。 25日までなら当月の25日、26日以降なら翌月25日を返します。
お礼
ご回答ありがとうございます。 解説もつけてくださり助かります。 この後早速ためしてみます。 ありがとうございました。