- ベストアンサー
VBAで月末日の求め方について
Excel VBAでUserForm1で年月日を入力すると、その月の月末日を取得したいと思っています。 下のようなプログラムにすると、 「2006/3/1」と入力された場合は、lasDayに「31」が取得されるのですが、 myDate = TextBox1.Text lasDay = Day(DateAdd("d", -1, DateAdd("m", 1, myDate))) 「2006/3/5」などと入力された場合もlasDayに「31」を取得するには どのようにしたらよいのでしょうか。 また、入力された日にちが25日以降の場合は、 翌月の月末日の値を取得したいのですが、どのようにしたらよいのでしょうか。 (例:「2006/2/25」と入力したら、lasDayは翌月(3月)の月末日「31」を取得) どのたか回答お願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
分岐の条件のところに間違いがありました。 25日以降の条件がCase Is = 25となっています。 Case Is >= 25が正しいです。 何度も申し訳ありません。 Private Sub CommandButton1_Click() Dim A As Integer, B As Integer, C As Integer, lasDay As Date A = Year(TextBox1) B = Month(TextBox1) C = Day(TextBox1) Select Case C Case Is < 25 B = B + 1 Case Is >= 25 B = B + 2 End Select lasDay = DateSerial(Year:=A, Month:=B, Day:=0) MsgBox lasDay End Sub
その他の回答 (7)
s_husky です。 蛇足ですが、実際の書くべきコードは、 lasDay =GetDate(myDate, abs(format(myDate,"dd") >= "25"), 99) です。
お礼
何度も回答ありがとうございます。 おかげで解決することができそうです。 どうもありがとうございました。
s_husky です。 質問を読み間違っていました。 応用例は、もっと、簡単で宜しいようです。 ? GetDate("2006/03/01", abs(format("2006/03/01","dd") >= "25"), 99) 2006/03/31 ? GetDate("2006/03/25", abs(format("2006/03/25","dd") >= "25"), 99) 2006/04/30
私が用いているGetDate関数です。 ? GetDate("2006/03/19", 0, 1) <--- 0=当月, 1=1日 2006/03/01 ? GetDate("2006/03/19", +1, 1) <--- +1=次月, 1=1日 2006/04/01 ? GetDate("2006/03/19", -1, 1) <--- +1=前月, 1=1日 2006/02/01 ? GetDate("2006/03/19", 0, 99)<--- 0=当月, 99=月末 2006/03/31 ? GetDate("2006/03/19", +1, 99)<--- +1=次月, 99=月末 2006/04/30 ? GetDate("2006/03/19", -1, 99) <--- +1=前月, 99=月末 2006/02/28 ? GetDate("2006/03/19", -1, 15) <--- +1=前月, 15=15日 2006/02/15 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("2006/03/25", _ abs(format("2006/03/25","dd") >= "25"), _ iif(format("2006/03/25","dd") >= "25", 99, val(format("2006/03/01","dd")))) 2006/04/30 ******************************************
- takachan7272
- ベストアンサー率29% (179/616)
あ、日付による分岐がありましたね・・・ これでOKかと思います。 Private Sub CommandButton1_Click() Dim A As Integer Dim B As Integer Dim C As Integer Dim lasDay As Date A = Year(TextBox1) B = Month(TextBox1) C = Day(TextBox1) Select Case C Case Is < 25 B = B + 1 Case Is = 25 B = B + 2 End Select MsgBox DateSerial(Year:=A, Month:=B, Day:=0) End Sub 今度は確認しましたので、"自信あり"にしました。
- takachan7272
- ベストアンサー率29% (179/616)
私が使っている月末の出し方です。 もっと簡単な方法があるかもしれませんが・・・ Private Sub CommandButton1_Click() Dim A As Integer Dim B As Integer Dim lasDay As Date A = Year(TextBox1) B = Month(TextBox1) lasDay = DateSerial(Year:=A, Month:=B + 1, Day:=0) MsgBox lasDay End Sub
- papayuka
- ベストアンサー率45% (1388/3066)
こんな感じ? Private Sub CommandButton1_Click() If IsDate(TextBox1.Text) Then myDate = TextBox1.Text If Day(myDate) < 25 Then MsgBox DateSerial(Year(myDate), Month(myDate) + 1, 0) MsgBox Day(DateSerial(Year(myDate), Month(myDate) + 1, 0)) Else MsgBox DateSerial(Year(myDate), Month(myDate) + 2, 0) MsgBox Day(DateSerial(Year(myDate), Month(myDate) + 2, 0)) End If End If End Sub
お礼
回答どうもありがとうございます。 おかげで解決することができそうです。 どうもありがとうございました。
翌月1日マイナス1日
お礼
回答どうもありがとうございました。
お礼
何度も回答ありがとうございます。 おかげで解決することができそうです。 本当にどうもありがとうございました。