Help us understand the problem. What is going on with this article?

ACCESSで日付を空白埋めする

ことのはじめ

とあるシステムで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関数の書式設定を使いつつどうにかできないかなとVBAゴネゴネしてたらいつの間にかできてた

'------------------------+'
'+ 共通モジュール         
'+
'+   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, "") <> "" 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日")→   ( )年 月 日

注意

自分の使う書式しか入ってないので、他の日付書式とか曜日とか入れたい人は

b = Replace(b, "aaa", Format(a, "aaa"))

みたいな感じで入れるとよい

補足

実際にwordとかに差し込む場合は一つ注意点があって、段落オプションで
空白の自動調整的なのをオフにする必要がある
あとこれ、試してないけどexcelでも使えるんじゃないかな

azriuum
仕事でAccessをお触り プログラミングは経験無かったので難しい言葉は分からないし常に我が道を行ってる 変数とか関数名に容赦なく日本語を使うし、なんならプロシージャとファンクションとメソッドと関数という単語を全部同じ意味で使う
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away