#735 日付を数字を使った英語の序数表記にするには? VBA

「序数」とは順序を表す表記で、英語の「ファースト(1st)、セカンド(2nd)、サード(3rd)・・・・・」のことです。

日付の場合、月名の英語表記や数字のみの日付表記はコントロールの「書式」プロパティや「Format$関数」などで簡単に置き換えられますが、この序数に関しては単純にそれらでは変換できません。また、「4th」のようにすべてに「th」を付ければよいというわけでもありませんし、下1桁が「1」であっても「11」は「11st」ではなく「11th」とするなど、例外パターンもあります。

そこでオリジナルの関数(Functionプロシージャ)を使って、引数で渡された日付の日にち部分について、数字を使った英語の序数表記にして返す例を紹介します。なお、序数自体は大きな数字までありますが、日にちは最大で「31」ですので、そこまでを対象としたものとします。


まず、フォームやレポートのモジュールに下記のプロシージャを作ります。もし標準モジュールに記述したい場合は1行目の「Private」を「Public」に書き換えてください。

Private Function GetOrdinal(dtmDate As Date) As String
'日付を数字を使った英語の序数表記にして返す

  Dim strRet As String

  Select Case Day(dtmDate)
    Case 1, 21, 31
      strRet = "st"
    Case 2, 22
      strRet = "nd"
    Case 3, 23
      strRet = "rd"
    Case Else
      strRet = "th"
  End Select

  GetOrdinal = Format$(dtmDate, "d") & strRet

End Function


次に上記プロシージャを呼び出す側の例です。ここではレポートを使って、テーブルに保存されている日付をそのまま出力するとともに、その右にそれを序数表記にしたものを出力します。
そのレポートデザインは下図のようなものです。


ここで、右側のテキストボックスの「コントロールソース」プロパティに次の式を設定します。序数表記にした日にちと、月の英語表記を繋げて出力しています。

=GetOrdinal([日付]) & " " & Format$([日付],"mmm")


これを実行(プレビュー)すると下図のように出力されます。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved