こんばんは。ActiveReportsNETで
数字8桁の日付を(20070305)をYYYY年MM月DD日
(2007年3月5日)で返すプロシージャ
をつくっているのですがどうしても、03→3月になりません。
Private Function fYYYYMMDD2(ByVal pDATE As Long) As String
Dim strDATE
If pDATE = "0" Then
fYYYYMMDD2 = ""
Exit Function
End If
strDATE = CStr(pDATE)
fYYYYMMDD2 = Left(strDATE, 4) & "年" & Format(Mid(strDATE, 5, 2), "##") & "月" & Format(Mid(strDATE, 7, 2), "##") & "日"
End Function
どこがまずいのでしょうか?
なぜわざわざ数字ではなく数値で受け取るのか分かりませんが(数値≠数字)
私が作るなら
Private Function fYYYYMMDD2(ByVal pDATE As Long) As String
Dim s As String
Dim d As Date
If pDATE = 0 Then Exit Function
s = Right$("00000000" & CStr(Abs(pDATE)), 8)
d = DateSerial(CInt(Mid$(s, 1, 4)), CInt(Mid$(s, 5, 2)), CInt(Mid$(s, 7, 2)))
fYYYYMMDD2 = Format$(d, "yyyy年mm月dd日")
End Function
の様になるでしょう。
追伸
> If pDATE = "0" Then
まさしく数値と数字を混同しています
> どこがまずいのでしょうか?
データ型を意識していないからでは?
> Format(Mid(strDATE, 5, 2), "##")
第一引数に「Mid(strDATE, 5, 2)」という「文字列」を指定していますが、
"#"は、「数値用の書式」ですから、第一引数は数値を(数値に変換して)指定してください。
#なお、VB2005の場合(VB.NETでどうなるかは未確認)、
#Format関数の第一引数に文字列を指定した場合の動作は、
#サポートされていないようです。
ありがとうございます。
理由はよくわかりました。
すいません、もう1点だけお願いします。
Absが宣言されていませんのエラーになってしまいます。
どうするとよいのでしょうか?
> Absが宣言されていませんのエラーになってしまいます。
VB.NETでは「Abs関数」は組み込み関数ではなく、「Mathクラス」のメンバ(メソッド)ですから・・・「Math.Abs」なのでは?
ありがとうございました。
無事解決しました。
ツイート | ![]() |