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

Public Const 今年度 = "2008"
Public 月 As Long

Sub test()
月 = 3
MsgBox CDate(今年度 & "/" & 月 & "/31 ")
End Sub

なら3月の最終日を無理やり表示させられますが
4月なら30日、5月なら31日と変数を代入した場合もその月の最終日を表示させるにはどうすればいいのでしょうか?


・月は他のプロシージャーで代入しています。(今月と言う意味ではないです。)
・月はLong型よりdate型のほうがいいのでしょうか?
・たくさんのプロシージャーに今年度 を代入している為Public Constで宣言しています。ただこれのデータ型はどうなのでしょうか?
・エクセル2003です。

よろしくお願い致します。

A 回答 (5件)

>月はLong型よりdate型のほうがいいのでしょうか?


>Public Constで宣言しています。ただこれのデータ型は?

両方とも、Integerです。
年月日に変換した結果は、Date型になります。

サンプルをアップ。

'-----------------------------------------
Public Const 今年度 As Integer = 2008
Public 月 As Integer
'------------------------------------------
Sub Test()
 Dim myDate As Date
 月 = 2
 myDate = DateSerial(今年度, 月 + 1, 0)
 MsgBox myDate
End Sub
'-------------------------------------------
 
 
    • good
    • 0
この回答へのお礼

Integer型にしてみました。ご回答ありがとうございます。

お礼日時:2009/03/06 20:13

もうすでに回答は出ているけど誰も説明していないのでw



もうお分かりかと思いますが、月の最終日を求めるにはその翌日の1日から1引いて求めるってことですよね。
    • good
    • 0
この回答へのお礼

質問する前にもっと頭をやわらかくして考えるべきでしたね!
ご回答ありがとうございます。

お礼日時:2009/03/06 20:14

色々考えられますが、元のコードを生かして



Public Const 今年度 As Integer = 2008
Public 月 As Integer

Sub test()
月 = 3
月 = 月 + 1 Mod 12
MsgBox CDate(今年度 & "/" & 月 & "/1") - 1
End Sub

>ただこれのデータ型はどうなのでしょうか?
一旦文字列の連結によって文字型にしますから、型はあまり気にする必要はないように思います。整数型でよいでしょう
    • good
    • 0
この回答へのお礼

いろいろなやり方があることに感心します!
ご回答ありがとうございます。

お礼日時:2009/03/06 20:14

Public Const 今年度 = "2008"


Public 月 As Integer

Sub test()
月 = 3
MsgBox DateSerial(今年度, 月 + 1, 0)
End Sub

ではいかがでしょう?
    • good
    • 0
この回答へのお礼

できました!
ご回答ありがとうございます。

お礼日時:2009/03/06 20:13

VBAは苦手なので、次の回答があるまでのつなぎですm(_ _)m


Public Const 今年度 = "2008"
Public 月 As Byte

Sub test()
Dim a
月 = 1
a = Cells(1, 1).Value
Cells(1, 1).Formula = "=DATE(" & 今年度 & "," & 月 + 1 & ",0)"
MsgBox Cells(1, 1).Value
Cells(1, 1).Value = a
End Sub
参考まで
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2009/03/06 20:13

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