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

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

A 回答 (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

この回答への補足

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

補足日時:2012/02/05 23:26
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/05 22:54

マクロでというよりも関数で十分対応できますね。

次のようにしてはどうでしょう。
C3セルに次の式を入力してC53セルまでオートフィルドラッグします。

=IF(A1="","",IF(DAY(B3)<=15,DATE(YEAR(B3),MONTH(B3)+3,0),DATE(YEAR(B3),MONTH(B3)+4,0)))
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/05 23:14

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になるのかもしれないが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/05 03:20

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