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

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

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

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

スポンサーリンク

記事概要

Format関数のような処理を実現するためには、以下の2通りがあります。

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

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

trickpalace.net - このウェブサイトは販売用です! - trickpalace リソースおよび情報
このウェブサイトは販売用です! trickpalace.net は、あなたがお探しの情報の全ての最新かつ最適なソースです。一般トピックからここから検索できる内容は、trickpalace.netが全てとなります。あなたがお探しの内容が見つか...

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

コメント

タイトルとURLをコピーしました