- ベストアンサー
ACCESS 日付表示で00月を使用する
日付の表示を昭和61年00月と表示する場合があるのですが データ型 日付/時刻 のフィールド書式プロパティに ggge\年m\月と指定すると00月が使用できません。 00月を使用する場合、日付/時刻型では駄目なのでしょうか? 書式:ggge\年m\月 定型入力:>L99\年99\月;0;_
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>文字列型でもいいのですが、s6100この様に入力した際に >昭和61年00月と表示するにはどのようにすればよいでしょうか? 定型入力:>L99\年99\月;0;_ 最初の質問の定形入力なら、"S61年00月"と言うデータが テーブルに保存されていると思います。 テーブルのデータを変更するのではなく、 表示の際に、"昭和61年00月"にする場合。 新規のモジュールを作成し、下記を記述。適当な名前で保存します。 ----------------------------------------------------------- Public Function MyFormat(data As Variant) As Variant Dim strDate As String MyFormat = data If IsDate(data) Then MyFormat = Format(CDate(data), "gggee\年mm\月") Else strDate = Left("" & data, InStr(1, "" & data, "年")) If strDate <> "" Then strDate = strDate & "1月1日" If IsDate(strDate) Then MyFormat = Format(CDate(strDate), "gggee\年") & "00月" End If End If End If End Function ----------------------------------------------------------- レポート等に表示する際は、レコードソースを下記の様にします。 =MyFormat([フィールド名]) =========================================================== テーブルのデータその物を、"昭和61年00月"に書き換えたい場合。 テキストボックスのイベント「更新後処理」の イベントプロシージャに、下記を記述します。 ----------------------------------------------------------- Private Sub テキスト0_AfterUpdate() Me![テキスト0] = MyFormat(Me![テキスト0]) End Sub ----------------------------------------------------------- ・テキストボックス名は、正しい名前に変更してください。 ・上記のモジュールも必要です。 ・定形入力と矛盾するので、データ修正の際に注意が必要です。 =========================================================== ついでに、データを年と月に分けた場合。 年は文字列型("S61"など)、月は文字でも数値でも可。 月が不明な場合は、0又は、Nullとします。 レポート等に表示する際は、レコードソースを下記の様にします。 =IIf(IsNull([年]), Null, IIf(0 = Nz([月]), Format([年] & "/1/1", "gggee\年\0\0\月"), Format([年] & "/" & [月] & "/1", "gggee\年mm\月"))) 長いですが、モジュール無しでも、変換可能だと思います。
その他の回答 (5)
- mshr1962
- ベストアンサー率39% (7417/18945)
#2です。補足読みました。 >月が分からない場合00月と表記しているので、(例えば生年月日) 方法1.テキスト型で入力する。 方法2.数値型(長整数)で西暦で入力する。 書式は 0000\年00\月 例 200800 → 2008年00月 方法3.年と月を別フィールドにする。
補足
ありがとうございます。 別フィールドにするのが一番無難ですかね。 入力に使う資料が和暦なので西暦入力はきついです。 #3の方にも補足で書きましたが、テキスト型でs6100→昭和61年00月 のような表記は出来るのでしょうか?
もちろん、本当に’昭和61年00月’とは表示不能。 というか、そういう入力自体がそもそも不可能じゃないですか? ですから、そういう表示問題に遭遇するケースはないと思いますが・・・。 精々、 ID__日付 1___平成17年10月15日 2___??00年00月00日 という表示が限度です。 これですと、未定行の表示として論路的にも成立します。 ということで、発想そのものの再検討が必要なのでは・・・。
- venzou
- ベストアンサー率71% (311/435)
日付/時刻型では、月の範囲は1~12なので、0には出来ません。 仰るとおり、日付/時刻型では保存できないと思います。 「00月」を入力した場合、日付型に変換出来ないので、 エラーになると思います。 「00月」と言うデータを残したいのであれば、 取り合えず、文字列型で保存するしかないと思います。 ・このデータを、何に利用するのか? ・その際、文字列型では不都合があるのか? この辺り、考えてみて下さい。 何か不都合があるのなら、補足して下さい。
補足
文字列型でもいいのですが、s6100この様に入力した際に 昭和61年00月と表示するにはどのようにすればよいでしょうか?
- mshr1962
- ベストアンサー率39% (7417/18945)
駄目ですね。だって0日(1日未満)とか0月(1ヵ月未満)なんて日付にはありませんから それと0月なのに年号を表示させるのもおかしいですよね。 0月を表示させるケースは経過年月や年齢の表示くらいではありませんか? どうしてもというのであれば クエリで別のフィールドに 日付2:Format([日付],"ggge年")&Format(Month([日付])-1,"00月") のようにするか フォームやレポートでテキストボックスのコントロールソースに =Format([日付],"ggge年")&Format(Month([日付])-1,"00月") として入力値とは別に表示させるしかありません。
補足
回答ありがとうございます。 別に00月でなくともいいのですが、月が分からない場合00月と表記しているので、(例えば生年月日) 表示方法としては※※でも実際のところ構わないのです。
ggge\年mm\月dd\日 ID__日付 1___平成17年10月15日 2___平成20年01月01日 m -> mm d -> dd で、1->01 かと思います。
お礼
ありがとうございます。助かりました。