【VBA】Formatで日付・時刻、数値、文字列の表示設定(和暦、曜日)

Format関数って使ってますか?

Format関数は出力表示する際の表示形式を設定する場合に使用します。日付・時刻の表示形式は、和暦や曜日の表示なども色々と設定できるようになっていますので、使う機会も多いかと思います。

この記事では、Format関数について

  • Format関数とは
  • 日付・時刻の表示設定
  • 数値、文字列の表示設定

など基本的な内容から、応用的な使い方についても解説していきます。

今回はFormat関数の使い方について、使い方をわかりやすく解説します。

Format関数とは

Format関数は、指定した書式で値をString型に変換します

値には数値や日付・時刻の文字列を指定し、出力表示する際の書式を設定することができます。書式には和暦や曜日の表示など設定できるようになっています。

それぞれの書式で出力表示する方法についてみていきましょう。

Format関数の使い方

Format関数は以下のように記述します。

Format( expression[,format [,firstdayofweek [,firstweekofyear]]])

引数の中で「[ ]」で囲まれた部分は省略することができます。

引数についての説明を表にまとめました。

引数説明
expression日付や数値など文字列型に変換したい値を指定
format書式を指定
firstdayofweek最初の曜日を指定する定数
firstweekofyear年内で、最初の週を指定する定数

引数formatについては項目が多いので、次の章以降で日付・時刻と値・文字列に分けて解説します。

引数firstdayofweekの設定は次のとおりです。

定数説明
vbSunday1日曜日(デフォルト値)
vbMonday2月曜日
vbTuesday3火曜日
vbWednesday4水曜日
vbThursday5木曜日
vbFriday6金曜日
vbSaturday7土曜日

引数firstweekofyearの設定は次のとおりです。

定数説明
vbFirstJan111 月 1 日が含まれる週から開始(デフォルト値)
vbFirstFourDays24 日以上が含まれる最初の週が年の第 1 週目
vbFirstFullWeek31 週間全体が含まれる最初の週がその年の第 1 週目

日付・時刻の表示設定

Format( expression,format )

引数formatの定義済みの書式で日付・時刻に関するものを表にまとめました。

定義済み書式説明出力表示例
Long Date長い形式で表した日付2017年9月1日
Medium Date簡略形式で表した日付09-01-17
Short Date短い形式で表した日付2017/09/01
Long Time時刻、分、秒を含む形式で表した時刻14:22:22
Medium Time時間と分を12時間制で表した時刻午前、午後も追加02:22 午後
Short Time時間と分を24時間制で表した時刻14:22

書式をユーザーで定義する場合は下記の指定文字を使用します。

文字説明
:時刻の区切り記号2:22:22
/日付の区切り記号2017/09/01
cdddddおよびtttttの書式で表した日付と時刻を、日付、時刻の順で返す2017/09/01 2:22:22
d日付1桁の場合、先頭に0は付けない1~31
dd日付1桁の場合、先頭に0を付ける01~31
ddd英語(省略形)表記の曜日Sun~Sat
aaa日本語(省略形)表記の曜日日~土
dddd英語表記の曜日Sunday~Saturday
aaaa日本語(省略形)表記の曜日日曜日~土曜日
ddddd年、月、日を含むyyyy/mm/dd形式の日付2017/09/01
dddddd年、月、日を含むmmmm dd, yyyy形式の日付September 01 2017
w曜日を表す数値日曜日が 1、土曜日が 7
wwその日が一年のうちで何週目かを表す数値1~54
m月1桁の場合、先頭に0は付けないただし、hやhhの直後にmを指定した場合は、分1~12
mm
1桁の場合、先頭に0を付ける
ただし、hやhhの直後にmを指定した場合は、分
01~12
mmm英語(省略形)表記の月の名前Jan~Dec
mmmm英語表記の月の名前January~December
oooo日本語表記の月の名前1月~12月
q1年のうちで何番目の四半期かを表す数値1~4
g年号の頭文字M、T、S、H
gg年号の頭文字の漢字1文字明、大、昭、平
ggg年号明治、大正、昭和、平成
e年号に基づく和暦1桁の場合、先頭に0は付けない1
ee年号に基づく和暦
1桁の場合、先頭に0を付ける
01
y1年のうちで何日目かを表す数値1~366
yy西暦年の下2桁の数値00~99
yyyy西暦年の4桁の数値100~9999
h時間1桁の場合、先頭に0は付けない0~23
hh時間
1桁の場合、先頭に0は付ける
00~23
n分1桁の場合、先頭に0は付けない0~59
nn
1桁の場合、先頭に0を付ける
00~59
s秒1桁の場合、先頭に0は付けない0~59
ss
1桁の場合、先頭に0を付ける
00~59
ttttth:nn:ss形式の時刻2:22:22
AM/PM時刻が正午以前の場合AM正午~午後11時59分の場合PM
am/pm時刻が正午以前の場合am正午~午後11時59分の場合pm
A/P時刻が正午以前の場合A正午~午後11時59分の場合P
a/p時刻が正午以前の場合a正午~午後11時59分の場合p

この表からもわかるように、日付・時刻に加えて和暦や曜日を出力表示することも可能です。

日付・時刻の表示を設定する方法

まずは日付・時刻を出力表示する設定についてサンプルコードで確認してみましょう。

なお、Format関数の第1引数にNowを指定すると現在の日付・時刻を取得します。

Sub macro1()
    Dim str As String, msg As String
    str = "17年9月1日 2時2分2秒"
    
    msg = Format(str, "Long Date") & vbCrLf & _
            Format(Now, "Short Time") & vbCrLf & _
            Format(str, "c") & vbCrLf & _
            Format(str, "yyyy/mm/dd hh:nn:ss AM/PM")

    MsgBox msg
End Sub

実行結果:
format01

和暦で表示する設定

Format関数では西暦の日付から和暦に変換して表示することも可能です。

逆に和暦の日付から西暦に変換して表示することも可能です。

サンプルコードで確認しましょう。

Sub macro2()
    MsgBox Format("17年9月1日", "ggge年mm月dd日") & vbCrLf & _
            Format("平成29年9月1日", "yy/mm/dd")
End Sub

実行結果:
format02

曜日を表示する設定

曜日を表示する設定についてサンプルコードで確認しましょう。

Sub macro3()
    MsgBox Format("17年9月1日 2時2分2秒", "ddd") & vbCrLf & _
            Format("17年9月1日 2時2分2秒", "aaaa")
End Sub

実行結果:
format03

数値・文字列の表示設定

日付・時刻以外の書式をユーザーで定義する場合は下記の指定文字を使用します。

文字説明
0桁位置や桁数を指定
変換対象の数値の桁数が少なく、指定された桁位置に該当する値がない場合は、その桁には 0 が入る
#桁位置や桁数を指定
変換対象の数値の桁数が少なく、指定された桁位置に該当する値がない場合は、その桁には何も入らない
@1つの文字またはスペース
対応する位置に文字が存在する場合、その文字が表示文字がなければスペースが表示
&1つの文字
対応する位置に文字が存在する場合、その文字が表示文字がなければ何も表示せず、詰められて表示
<小文字に変換
>大文字に変換
!文字を左から右に埋める

サンプルコードで確認しましょう。

Sub macro4()
    Dim str As String, msg As String
    str = "123"
    
    msg = Format(str, "@、@、@") & vbCrLf & _
            Format(str, "@@") & vbCrLf & _
            Format(str, "@@@") & vbCrLf & _
            Format(str, "@@@@") & vbCrLf & _
            Format(str, "@@@@@") & "です" & vbCrLf & _
            Format(str, "[email protected]@@@@") & "です" & vbCrLf & _
            Format(str, "&&") & vbCrLf & _
            Format(str, "&&&") & vbCrLf & _
            Format(str, "&&&&") & vbCrLf & _
            Format(str, "&&&&&") & vbCrLf & _
            Format("ABC", "<&&&&&") & vbCrLf & _
            Format("abc", ">&&&&&")

    MsgBox msg
End Sub

実行結果:
format04

0埋めで表示する設定

0(ゼロ)埋めで表示する設定についてサンプルコードで確認しましょう。

Sub macro5()
    Dim str As String, msg As String
    str = "123"
    
    msg = Format(str, "0") & vbCrLf & _
            Format(str, "00") & vbCrLf & _
            Format(str, "000") & vbCrLf & _
            Format(str, "0000") & vbCrLf & _
            Format(str, "00000")

    MsgBox msg
End Sub

実行結果:
format05

小数点以下の桁数を設定

小数点以下の桁数の設定についてサンプルコードで確認しましょう。

小数点3位を四捨五入して、小数点2位まで表示します。

Sub macro6()
    Dim str As String
    str = "123.4567"
    
    MsgBox Format(str, "0.00")
End Sub

実行結果:
format06

文字列の表示設定

大文字を小文字に、小文字を大文字に変換して表示する設定についてサンプルコードで確認しましょう。

Sub macro7()
    Dim str1 As String, str2 As String
    str1 = "HELLO"
    str2 = "hello"
    
    MsgBox Format(str1, "<") & vbCrLf & Format(str2, ">")
End Sub

実行結果:
format07

まとめ

ここではFormat関数の使い方について説明しました。

Formt関数の第2引数には指定文字を使って、ユーザー定義の書式を設定することができます。

指定文字にはたくさんの種類の文字が指定できますので、ご自身でこの記事を参考にして色々と試してみてください!

使いこなすことができるように、この記事を何度も参考にして下さいね!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説