VBScript:VBScriptで日付用のFormat関数を作成するサンプルプログラム

VBScriptには、日付などの表示書式を変更することができるFormat関数がありません。

今回日付の書式を操作する必要があったため、日付の書式変更に限定したFormat関数をVBScriptで作成したので覚書きしておきます。
スポンサードリンク


記事概要

Format関数のような処理を実現するためには、スクリプト中に文字列操作関数などを使用して求めるフォーマットに変換する処理をロジックに直接含めるか、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関数を使用したいコードを書いていけばそれほど行数は増えなですし、見ばえも多少はよくなるかと思います。

外部ファイルのインクルード方法については、以下のページを参考にさせていただきました。

TrickPalace「WSH:外部ファイルのインクルード」

また、和暦に関して1912年7月30日は、明治でも大正でもどちらでも正しいそうだが、プログラム上明確な区切りが必要なため29日までを明治としました。

スポンサードリンク

  

関連記事