こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル2003 関数で日付を計算

エクセル2003を使用しています。
関数で不可能なら、簡単なマクロもOKです。

V34に日付が入力されています。
このセルの内容は時々手入力で変更されます。
3ヶ月後の日付を別のセル(I122)に以下の様な関数で求めています。
=IF(V34="","",EDATE(V34,3))

この3ヶ月後の計算を以下の様に変更したいのですが、どうしたら良いのでしょうか?

V34の日の値が1~15の場合には、翌々月の最終日を表示。
(例:V34がH20/6/12の場合、H20/8/31が表示される。)

V34の日の値が16以降の場合には、3ヶ月後の最終日を表示。
(例:V34がH20/6/16の場合、H20/9/30が表示される。)

ご教示の程、よろしくお願い致します。

投稿日時 - 2008-06-12 11:42:47

QNo.4094542

困ってます

質問者が選んだベストアンサー

=IF(DAY(V34)<=15,EOMONTH(V34,2),EOMONTH(V34,3))

投稿日時 - 2008-06-12 11:50:51

お礼

=IF(V34="","",IF(DAY(V34)<=15,EOMONTH(V34,2),EOMONTH(V34,3)))

有難うございました。
V34が空欄でも対応出来る様、上記の様にしました。

投稿日時 - 2008-06-12 14:58:44

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

次の方法は如何でしょうか。
=IF(V34<>"",IF(DAY(V34)<=15,DATE(YEAR(V34),MONTH(V34)+3,0),DATE(YEAR(V34),MONTH(V34)+4,0)),"")

投稿日時 - 2008-06-12 12:31:30

=IF(V34="","",EOMONTH(V34-15,3))

でいいでしょ。多分。

投稿日時 - 2008-06-12 12:09:51

H20.6.12___H20.8.31 <--- =GetDate(A1, 2+ABS(DAY(A1)>15), 99)
H20.6.16___H20.9.30 <--- =GetDate(A1, 2+ABS(DAY(A1)>15), 99)

=EOMONTH(A1,2+ABS(DAY(A1)>15))

でもOK!

Public Function GetDate(ByVal Now As Date, _
            ByVal Move As Integer, _
            ByVal Hiduke As Integer) As Date
            
  GetDate = DateSerial(DatePart("yyyy", Now), _
             DatePart("m", Now) + Move - (Hiduke = 99), _
             Hiduke * Abs(Hiduke <> 99))
End Function

エクセルは一度も操作したことがありません。
でも、エクセルの関数を使う場合も同じ手法だと推察します。

[イミディエイト]
? GetDate("2008/6/12", 2, 99)
2008/08/31
? GetDate("2008/6/12", 3, 99)
2008/09/30
? GetDate("2008/6/12", 2, 1)
2008/08/01
? GetDate("2008/6/12", 3, 1)
2008/09/01

要は、月を2加算するのか2+1加算するのかだと思います。

[イミディエイト]
? ABS(DAY("2008/6/12")>15)
0
? ABS(DAY("2008/6/16")>15)
1

投稿日時 - 2008-06-12 12:03:50

あなたにオススメの質問