みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ExcelVBA 年月を年度に変換したい

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の使い方がおかしいのでしょうか?

投稿日時 - 2013-04-25 23:08:58

QNo.8059761

すぐに回答ほしいです

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

Private function 年度変換() as integer
 Public 年度算出 As Date
 
年度算出 = cdate(cmbYY & "/" & cmbMM & "/01")

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

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

end function

投稿日時 - 2013-04-25 23:38:28

お礼

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

投稿日時 - 2013-04-26 22:38:04

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

A2に年月として
=IF(MOD(RIGHT(A2,2),100)>3,LEFT(A2,4),LEFT(A2,4)-1)

投稿日時 - 2013-04-26 03:24:47

お礼

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

投稿日時 - 2013-04-26 22:38:49

ANo.2

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

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

投稿日時 - 2013-04-26 01:42:59

お礼

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

投稿日時 - 2013-04-26 22:38:29

あなたにオススメの質問