VBScriptには、日付などの表示書式を変更することができるFormat関数がありません。
今回日付の書式を操作する必要があったため、日付の書式変更に限定したFormat関数をVBScriptで作成したので覚書きしておきます。
記事概要
Format関数のような処理を実現するためには、以下の2通りがあります。
- スクリプト中に文字列操作関数などを使用して求めるフォーマットに変換する処理をロジックに直接含める
- Format関数と同じような機能を持つ関数を自作し、その関数に値を渡して結果を戻り値として受け取る仕組みにする
今回は、何回も書式変換を実行する必要があるのでFormat関数を自作しました。
VBScriptで作成したFormat関数のサンプルプログラム
以下にVBScriptで作成したFormat関数のサンプルプログラム記載します。
function Format(data,f,separator)
select case f
case "yyyymmdd"
y = year(data)
if month(data)<10 then
m = "0" & cstr(month(data))
else
m = month(data)
end if
if day(data)<10 then
d = "0" & cstr(day(data))
else
d = day(data)
end if
ret = y & separator & m & separator & d
case "yymmdd"
y = right(year(data),2)
if month(data)<10 then
m = "0" & cstr(month(data))
else
m = month(data)
end if
if day(data)<10 then
d = "0" & cstr(day(data))
else
d = day(data)
end if
ret = y & separator & m & separator & d
case "年月日"
ret = year(data) & "年" & month(data) & "月" & day(data) & "日"
case "yyyymmdd年月日"
y = year(data)
if month(data)<10 then
m = "0" & cstr(month(data))
else
m = month(data)
end if
if day(data)<10 then
d = "0" & cstr(day(data))
else
d = day(data)
end if
ret = y & "年" & m & "月" & d & "日"
case "和暦"
If data <= DateSerial(1912, 7, 29) Then
y = "明治" & Year(data) - 1867
ElseIf data >= DateSerial(1912, 7, 30) And data <= DateSerial(1926, 12, 24) Then
y = "大正" & Year(data) - 1911
ElseIf data >= DateSerial(1926, 12, 25) And data <= DateSerial(1989, 1, 7) Then
y = "昭和" & Year(data) - 1925
ElseIf data >= DateSerial(1989, 1, 8) Then
y = "平成" & Year(data) - 1988
End If
ret = y & "年" & month(data) & "月" & day(data) & "日"
case else
ret = data
end select
format = ret
end function
VBScriptで作成したFormat関数の説明と使い方
作成した関数は、引数として書式を変更したい日付時刻型の値「data」、変更する書式を指定する「f」、年、月、日の間に区切り文字("/"や"-"など)「separator」を受け取ります。
対応している書式は、「yyyymmdd」、「yymmdd」、「yyyy年m月d日」、「yyyy年mm月dd日」、和暦(例えば、平成21年1月15日など)の5種類です。
区切り文字を指定できるので、「yyyy/mm/dd」などの指定もできます。
使い方の例を以下に記載します。
使い方
上記Format関数のサンプルプログラムをVBScriptファイルにコピペします。
関数を使う時は、以下のように3つの引数を指定して呼び出します。
Format(日付時刻型の変数,指定書式,区切り文字)
区切り文字を指定しない場合は、""を指定してください。
以下のコードを実行してみればわかりやすいと思います。
msgbox "今日の日付を「yyyymmdd」形式で表示します"+vbcrlf+format(date,"yyyymmdd","")
msgbox "今日の日付を「yymmdd」形式で表示します"+vbcrlf+format(date,"yymmdd","")
msgbox "今日の日付を「yyyy-mm-dd」形式で表示します"+vbcrlf+format(date,"yyyymmdd","-")
msgbox "今日の日付を「yyyy年m月d日」形式で表示します"+vbcrlf+format(date,"年月日","")
msgbox "今日の日付を「yyyy年mm月dd日」形式で表示します"+vbcrlf+format(date,"yyyymmdd年月日","")
msgbox "今日の日付を和暦形式で表示します"+vbcrlf+format(date,"和暦","")
このFormat関数のコード自体がかなり長いので必要ない書式を生成している部分を削除してしまえば短くすることもできます。
別のVBScriptファイルにインクルードして使う方法
Format関数を記述したVBScriptを別ファイルにして、Format関数を使用したいVBScriptにインクルードして使うこともできます。
例えば、Format関数をformat.vbsという独立した1つのファイルにして、呼び出す側のVBScriptファイルの先頭部分に以下のコードを記述します。
Const ForReading = 1
Dim FileShell
Set FileShell = WScript.CreateObject("Scripting.FileSystemObject")
Function ReadFile(ByVal FileName)
ReadFile = FileShell.OpenTextFile(FileName, ForReading, False).ReadAll()
End Function
Execute ReadFile("format.vbs")
上記記述以降にFormat関数を使用したいコードを書いていけばそれほど行数は増えなですし、見ばえも多少はよくなるかと思います。
外部ファイルのインクルード方法については、以下のページを参考にさせていただきました。
また、和暦に関して1912年7月30日は、明治でも大正でもどちらでも正しいそうだが、プログラム上明確な区切りが必要なため29日までを明治としました。
コメント