海外旅行から帰ってきたら、まず何を食べる?

201303という年月を表す文字列を年度に変換したいのですが、関数がよく分かりません。

2013年3月ならば2012年度にしたいのです。

Private Sub UserForm_Initialize()
Dim i As Integer
Dim k As Integer

'コンボボックスから年と月を選択できるようにする

For i = -3 To 2
k = Year(Date) + i
If k >= 1900 And k < 2000 Then
k = k Mod 100
cmbYY.AddItem k
Else
cmbYY.AddItem k
End If
If i = 0 Then cmbYY.Value = k
Next i
For i = 1 To 12
If i <= 12 Then cmbMM.AddItem i
If i = DatePart("m", Date) Then cmbMM.Value = i
Next i

End Sub

これでcmbYYというコンボボックスには2010~2015年までが選択可に。
cmbMMというコンボボックスには1月~12月までが選択可能となっています。

これだと普通に年月を出すだけなので、年度に変換する為に

Private Sub 年度変換()
Public strYYMM As String
Public 年度算出 As Date

'月が1~9月までなら頭に0を入れて、年月を表示する
strYYMM = cmbYY & Format(cmbMM, "00")  '例:201303 201311等

'1月~3月の場合は前年になるように
年度変換 = DateAdd("m", -3, strYYMM)

年度変換 = DateAdd("m", -3, 年度変換)

こういう処理を組んでみたのですが、いざ試してみると年度が2049年になったりして暴走してしまいます。
DateAddの使い方がおかしいのでしょうか?

A 回答 (3件)

Private function 年度変換() as integer


 Public 年度算出 As Date
 
年度算出 = cdate(cmbYY & "/" & cmbMM & "/01")

 年度変換 = year(年度算出)

if month(年度算出)<4 then
  年度変換 = year(年度算出)-1
 else
  年度変換 = year(年度算出)
 end if

end function
    • good
    • 0
この回答へのお礼

参考になりました
ありがとうございました

お礼日時:2013/04/26 22:38

A2に年月として


=IF(MOD(RIGHT(A2,2),100)>3,LEFT(A2,4),LEFT(A2,4)-1)
    • good
    • 0
この回答へのお礼

参考になりました
ありがとうございました

お礼日時:2013/04/26 22:38

ベタに


strYYMM = (cmbYY - iif(cmbMM - 3 > 0, 0, 1)) & format(cmbMM, "00")
とかでも、十分な気はしますが。

まぁご相談者さんなりのコダワリでしたらDateAdd関数のヘルプをキチンと確認して、
-------
日付を表すバリアント型 (内部処理形式 Date の Variant) の値またはリテラル文字列を指定します。
-------
を与えてください。
「yyyymm」では、意図した日付(リテラル)ではありません。
    • good
    • 0
この回答へのお礼

参考になりました
ありがとうございました

お礼日時:2013/04/26 22:38

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