• ベストアンサー

エクセル VBA 月末日を表す方法を教えて下さい

Range("B3:B53")にそれぞれ任意の日付を入力した際 Range("C3:C53")に月末日を表記出来る様にしたいです。 ただし1日~15日なら2ヵ月後の月末日 16日~31日なら3ヶ月後の月末日 という条件で表記したいです。 私はあまり詳しくないので、手直ししないでもそのまま使えるプログラムなら 有り難いです。 上記の書き方で解るでしょうか、教えて頂ければ幸です。

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

一例です。 対象シートのタブ上で右クリック→コードの表示→以下のサンプルを貼り付けてお試しください。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("B3:B53")) Is Nothing Then Exit Sub For Each a In Target If IsDate(a) Then 月数 = 3 If Day(a) > 15 Then 月数 = 4 a.Offset(0, 1) = DateSerial(Year(a), Month(a) + 月数, 0) Else a.Offset(0, 1).ClearContents End If Next End Sub

mikanpc400
質問者

お礼

ありがとうございました 上記の通り何も手直しせずに出来ました。 難しいことは出来ないので大変助かりました。

mikanpc400
質問者

補足

ありがとうございました コードの貼り付けが上記の方法で出来る事を知りませんでした こんなに簡単な方法が有ったんですね コードは思っていたより難しかったので聞いて良かったと思いました。 出来なくて、参考書見ながらずーと考えていたので助かりました。

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

マクロでというよりも関数で十分対応できますね。次のようにしてはどうでしょう。 C3セルに次の式を入力してC53セルまでオートフィルドラッグします。 =IF(A1="","",IF(DAY(B3)<=15,DATE(YEAR(B3),MONTH(B3)+3,0),DATE(YEAR(B3),MONTH(B3)+4,0)))

mikanpc400
質問者

お礼

早速の返答ありがとうございました。 C3セルに入力してB3セルには普通に2/5と入力して試ればよいのでしょうか? うまく出来なかったのでB3セルへの入力の仕方が悪いのかなと思いました。 関数で出来れば簡単でいいので完成させたいです。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

VBAを使わなくても、ワークシート関数で、 =IF(DAY(B3)<=15,EOMONTH(B3,2),EOMONTH(B3,3)) とすれば、実現できる。2ヵ月後とかいうのが、いつのことか明確ではないので、上記2,3は1,2になるのかもしれないが。 VBAなら、そのまま、ワークシート関数を使えばできるでしょう。 Sub test() Set myrange = Range("B3:B53") For Each c In myrange If Day(c) <= 15 Then m = 2 Else m = 3 End If c.Offset(, 1) = Application.WorksheetFunction.EoMonth(c, m) Next End Sub 2,3は、2ヵ月後とかいうのが、いつのことか明確ではないので、上記2,3は1,2になるのかもしれないが。

mikanpc400
質問者

お礼

早速、返答を頂きましてありがとうございます・ 書き方が解りにくくて申し訳ありませんでした。 1日~15日なら2ヵ月後の月末日と言うのは 例えば2/10を入力すると、4/10が2ヵ月後なので4月の末日は4/30 16日~31日なら3ヵ月後の月末日と言うのは 例えば2/18を入力すると、5/18が3ヵ月後なので5月の末日は5/31 と表示したいと思っています。

関連するQ&A