ACCESSで日付型をゴネゴネ



2019/01/24 23:47


■ことのはじめ
とあるシステムでACCESSでとあるボタンを押したら、あらかじめテーブルに登録してあるSQLが実行されて、その内容でCSVを出力して
さらにそれをWORDに差し込んでさらにPDF化みたいなことをしている

そこで月ごとの金額明細みたいな表を作った時に、日付が
2016/11/10
2016/12/9
2017/1/8
2017/2/10
みたいな感じで縦に並べた時、幅がバラバラになる
なので書式をyyyy/mm/ddにして0詰めしたいところだが、お客様的にはそれが見栄えが良くなくてNGらしい(気持ちは分かる)
word側で等幅とかにしてみたけど余計に気持ちがわるい

どうにかyyyy/m/dとyyyy/mm/ddの幅を同じにしたい

で、どうしたものかと検索かけたら同じことをやりたい人がヒット(゚∀゚ )
http://www.accessclub.jp/bbs/0085/beginers31302.html






…うげえ、めんどくせえ

いや、この方法は思いついたけどさあ。。。
やりたくないからなんかスマートなformat方法はないかと調べたわけなんすよ。。。

ということで諦めて作ることにした


イメージは

2017/1/8→2017/ 1/ 8
2017/2/10→2017/ 2/10
みたいな感じ
あと、西暦だけじゃなくて和暦でも同じような感じにしたい
そして年月日だけじゃなく年月とかでもちゃんと表示できるようにしたい

要はいろんな日付書式で年や月や日が1ケタの場合空白で出来るようにしたい
そしていちいち&とかで繋げるんではなく、設定が楽にできるようにしたい

というわけで追記に続く


ということで、普通のformat関数の書式設定を使いつつどうにかできないかなとゴネゴネしてたらいつの間にかできてた
以下完成品



'------------------------+'
'+ 共通モジュール       
'+
'+ Name : dateFormat
'+
'+ 月や日が1桁の場合空白で充填する
'+ 引数
'+ a:日付項目(中身がNULLでも可)
'+ b:日付書式
'+
'+ 使い方
'+ dateFormat (now(),"yyyy/m/d日")→2018/ 9/ 5
'+ dateFormat (now(),"ggge(yyyy)年m月d日")→ 平成30(2018)年 9月11日
'+--------------------------------------------------------+'


Public Function dateFormat(a As Variant, b As String) As String
'If Nz(a, "") = "" or isDate(a)=false Then Exit Function
If Nz(a, "") <> "" And IsDate(a) = True Then
b = StrConv(b, vbLowerCase)
b = Replace(b, "ggg", Format(a, "ggg"))
b = Replace(b, "gg", Format(a, "gg"))
b = Replace(b, "g", Format(a, "g"))
b = Replace(b, "yyyy", Format(a, "yyyy"))
b = Replace(b, "ee", Format(a, "ee"))
b = Replace(b, "e", Format(Format(a, "e"), "@@"))
b = Replace(b, "mm", Format(a, "mm"))
b = Replace(b, "m", Format(Format(a, "m"), "@@"))
b = Replace(b, "dd", Format(a, "dd"))
b = Replace(b, "d", Format(Format(a, "d"), "@@"))
dateFormat = b
ElseIf Nz(a, "") = "" Then
b = StrConv(b, vbLowerCase)
b = Replace(b, "ggg", "  ")
b = Replace(b, "gg", " ")
b = Replace(b, "g", " ")
b = Replace(b, "yyyy", " ")
b = Replace(b, "ee", " ")
b = Replace(b, "e", " ")
b = Replace(b, "mm", " ")
b = Replace(b, "m", " ")
b = Replace(b, "dd", " ")
b = Replace(b, "d", " ")
dateFormat = b
Else
Exit Function
End If
End Function




使い方例にあるように

dateFormat (now(),"yyyy/m/d")→2018/ 9/ 5
dateFormat (now(),"ggge(yyyy)年m月d日")→ 平成30(2018)年 9月 1日
みたいな感じで変換できる!!!

そして日付が無いときにも対応!!!えらい!!!
dateFormat (null,"yyyy/m/d")→ / /
dateFormat (null,"ggge(yyyy)年m月d日")→   ( )年 月 日



実際にwordとかに差し込む場合は一つ注意点があって、段落オプションで
空白の自動調整的なのをオフにする必要がある


ggge(yyyy)年m月d日とかいう書式で身バレしそうな気がしている

そして改造欲求はとどまることを知らなかったのであった。。。


つづく

comment(0)











「#幼馴染」のBL小説を読む
BL小説 BLove
- ナノ -