• ベストアンサー

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」を取得) どのたか回答お願いします。

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

  • ベストアンサー
回答No.5

分岐の条件のところに間違いがありました。 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

piopao
質問者

お礼

何度も回答ありがとうございます。 おかげで解決することができそうです。 本当にどうもありがとうございました。

その他の回答 (7)

noname#22222
noname#22222
回答No.8

s_husky です。 蛇足ですが、実際の書くべきコードは、 lasDay =GetDate(myDate, abs(format(myDate,"dd") >= "25"), 99) です。

piopao
質問者

お礼

何度も回答ありがとうございます。 おかげで解決することができそうです。 どうもありがとうございました。

noname#22222
noname#22222
回答No.7

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

noname#22222
noname#22222
回答No.6

私が用いている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 ******************************************

回答No.4

あ、日付による分岐がありましたね・・・ これで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 今度は確認しましたので、"自信あり"にしました。

回答No.3

私が使っている月末の出し方です。 もっと簡単な方法があるかもしれませんが・・・ 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)
回答No.2

こんな感じ? 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

piopao
質問者

お礼

回答どうもありがとうございます。 おかげで解決することができそうです。 どうもありがとうございました。

noname#16474
noname#16474
回答No.1

翌月1日マイナス1日

piopao
質問者

お礼

回答どうもありがとうございました。