プロが教えるわが家の防犯対策術!

わかりにくいタイトルですみません。edateなど駆使しましたが出来ませんでした。
例えば3月7日(水)(3/7)の1ヶ月前の2/7(火)の1週間前の日1/31(火)を求めたい。

1ヶ月前に日付が無い時は翌月の1日を1ヶ月前としたい。そしてその1週間前を求めたいのです。


3/1の1ヶ月前は2/1で1週間前は同曜日の1/25。
3/7 → 2/7 → 1/31
3/29 →3/1 → 2/22これ含め下2つは同じになります
3/30 →3/1 → 2/22
3/31 →3/1 → 2/22
4/1 → 3/1 → 1/25
5/31 → 5/1 → 4/24
6/1 → 5/1 → 4/24ここは5/31と同じになります
7/31 → 7/1 → 6/24
8/1 → 7/1 →6/24ここは7/31と同じになります

こんな感じでJRの指定席購入日が決まっている現状です。
http://www.eki-net.com/top/jrticket/guide/reserv …
うるう年も存在し、数式作成が難儀です。

よろしくお願いします

質問者からの補足コメント

  • そうですね

    4/1 → 3/1 → 2/22でした

      補足日時:2017/02/01 07:48
  • うれしい

    A1に日にちいれて、B1に=IF(DAY(EDATE(A1,-1))=DAY(A1),EDATE(A1,-1),DATE(YEAR(A1),MONTH(A1),1))」を入れましたが計算できないのは、何が原因でしょう。お手数掛けます

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/02/06 06:18
  • うれしい

    ショボミスでした。

    」が最後についてました。

    後ほど皆さんの教えで確認してみます。

      補足日時:2017/02/06 12:51
  • うれしい

    ありがとうございました。
    C1列は完成しておりました。
    A1が3/28 B1が2/28 C1は2/21で◯
      3/29   3/1    2/22で◯
      3/30   3/2で×  2/22で◯
      3/31   3/3で×  2/22で◯
      4/1    3/1    2/22で◯
      4/2    3/2   2/23で◯
    となり、途中計算でB列にこちらの意図しない結果がありました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/02/07 05:28

A 回答 (7件)

昨日は連絡できずすみません。


C1に-7だけを残し、後はB1に詰め込めば多分大丈夫だと思います。

B1=IF(DAY(A1)=DAY(DATE(YEAR(A1),MONTH(A1)-1,DAY(A1))),DATE(YEAR(A1),MONTH(A1)-1,DAY(A1)),DATE(YEAR(A1),MONTH(A1),1))
C1=B1-7

どうですかね?
確認はできてませんが…
    • good
    • 0
この回答へのお礼

大変参考になりました

お礼日時:2017/02/11 11:58

あぁ、B列は単なる補助用に使っているだけかと思いました。


B列がそのように表示される旨は前回の説明で書いたとは思いますが。
本日帰宅しましたら修正方法考えます。
    • good
    • 0
この回答へのお礼

大変参考になりました

お礼日時:2017/02/11 11:58

・A1~C1セルの表示形式は日付型になっていますか?


・」を付けたままになっていませんか?(エラーになるので判ると思いますが…)
・Excel2003 以前を使用している(「#NAME?」が表示されるので判ると思いますが Excel 2003 以前は「EDATE関数」が実装されていない)

など考えられますがいかがでしょうか?
    • good
    • 0
この回答へのお礼

大変参考になりました

お礼日時:2017/02/11 11:58

EDATEを使おうとするからおかしくなるのでは?



=MIN(A1-DAY(A1-DAY(A1)*{1,0})-{7,6})
    • good
    • 0
この回答へのお礼

大変参考になりました

お礼日時:2017/02/11 11:57

・A1セルに元の日付


・B1セルが1ヶ月前の計算された日付
・C1セルには計算されたさらに1週間前の日付
とした場合
B1セルに「=IF(DAY(EDATE(A1,-1))=DAY(A1),EDATE(A1,-1),DATE(YEAR(A1),MONTH(A1),1))」
C1セルに「=B1-7」
ではいかがでしょうか?

※ 列記号や行番号は適当に直してください
この回答への補足あり
    • good
    • 0

こんにちは!



A1セル以降に基準の日付があるとすると、表示したいセルに
=EDATE(A1,-1)-7+(DAY(A1)>DAY(EDATE(A1,-1)))

としてみてはどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

大変参考になりました

お礼日時:2017/02/11 11:57

4/1の所も最後2/22ですよね?



左側の日付をA列に入力しているとして、
B1=DATE(YEAR(A1),MONTH(A1)-1,DAY(A1))
これで1月前の同じ日が出ます。
同じ日が無い場合はオーバーした日数分だけ次の月に入り込みます。
(例:2/28までしかない年の3/30を入力していた場合2/30日は2日オーバーしているので3/2と表示)

C1=IF(DAY(A1)=DAY(B1),B1,DATE(YEAR(A1),MONTH(A1),1))-7
これでA1の”日”とB1の”日”が同じならB1から、違う場合はA1の月の1日から、7日前を計算します。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!