【VBA】Format関数で日付や数値をフォーマットする

  • 2025.01.20
       
【VBA】Format関数で日付や数値をフォーマットする

VBAでデータを処理しているとき、日付や時刻などを特定の形式で表示したいことはよくあると思います。そんな時に便利なのが、Format関数です。

本記事では、Format関数の基礎知識や具体的な使い方について詳しく解説していきたいと思います!

VBAのFormat関数とは?

Format関数とは、引数に渡した特定の値を指定する書式の文字列に変換する関数です。

日時を指定して、年月日や時分秒のような形式に変換したり、日付や時刻を抜き出したりする際に使用します。書式には、和暦や曜日の表示なども設定できるようになっています。
その他にも、数値を通貨として表示したり、区切り文字を使って表示したりすることもできます。

Format関数の使い方

Format関数を使用する際の構文は以下の通りです。

【基本構文】

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

[ ]で囲まれた部分に関しては省略が可能です。
各引数についての説明は以下の表を参考にしてください。

引数 説明
expression 文字列に変換したい任意の値
format 定義済みの有効な書式名
もしくはユーザー定義の書式指定式
firstdayofweek 週の最初の曜日を指定する定数
firstweekofyear 年内で、最初の週を指定する定数

formatについては、既存で使用できる書式の数が多く、ユーザー側で定義する方法も様々あるため、後ほどいくつかの項目に分けて詳しく解説します。
その他の引数に設定できる値は以下の表の通りです。

firstdayofweek

定数 説明
vbUseSystem 0 NLS API 設定を使用
vbSunday 1 日曜日(デフォルト値)
vbMonday 2 月曜日
vbTuesday 3 火曜日
vbWednesday 4 水曜日
vbThursday 5 木曜日
vbFriday 6 金曜日
vbSaturday 7 土曜日

firstweekofyear

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

日付・時刻の表示設定

特定の値を日付や時刻を表示する文字列に変換する場合、主に2通りの書式指定方法があります。

1つはVBA側で既に定義されている書式を使用する方法、もう1つは書式指定文字を使用してユーザー自身で書式を指定する方法です。

それぞれの指定の仕方について、説明をしていきたいと思います。

定義済みの書式を使用して表示する

まずは、定義済みの書式を使用する方法について解説します。

既存の書式を使用する場合の基本構文は、次の通りです。

【基本構文】

Format(値, "書式名")

指定できる書式名の一覧を以下の表にまとめました。

書式名 説明 表示例
General Date 日付と時刻のどちらか、または両方を表示
日付表示はシステム設定に依存
2024/12/31 10:20:30
Long Date システムの長い日付形式の書式に従って日付を表示 2024年12月31日
Medium Date ホストアプリケーションの言語バージョンで、
中間の長さの日付書式を使用して日付を表示
24-12-31
Short Date システムの短い日付書式を使用して日付を表示 2024/12/31
Long Time システムの長い時間形式を使用して時間を表示 10:20:30
Medium Time 時間と分を12 時間の書式と午前/午後を使用して表示 10:20 午前
Short Time 24時間の形式を使用して時間を表示 10:20

以下はサンプルコードです。

【サンプルコード】

Sub sampleDate1()

 Dim str As String

 str = "2025/01/01 15:30:45"

 MsgBox "General Date:" & Format(str, "General Date") & vbCrLf & _
         "Long Date  :" & Format(str, "Long Date") & vbCrLf & _
         "Medium Date:" & Format(str, "Medium Date") & vbCrLf & _
         "Short Date  :" & Format(str, "Short Date") & vbCrLf & _
         "Long Time  :" & Format(str, "Long Time") & vbCrLf & _
         "Medium Time:" & Format(str, "Medium Time") & vbCrLf & _
         "Short Time  :" & Format(str, "Short Time")

End Sub

【実行結果】

ユーザー定義の書式を使用して表示する

次に、既存の書式は使わずにユーザー自身で書式を指定する方法について解説します。

1から書式を設定する場合は、書式指定文字を使用して、出力したい文字列の形式を作成します。

以下の表は、使用できる文字の一例です。

日付に使用できる文字

文字 説明
yy 年を2桁の数値で表示
yyyy 年を4桁の数値で表示
m 先頭にゼロを付けずに 1 から 12 の数値で月を表示
h または hh の直後に続く場合は分が表示される
mm 先頭にゼロを付けて 01 から 12 の数値で月を表示
h または hh の直後に続く場合は分が表示される
d 先頭にゼロを付けずに1から31の数値で日を表示
dd 先頭にゼロを付けて01から31の数値で日を表示
mmm 月を省略形のJanからDecとして表示
mmmm 月を完全な月名JanuaryからDecemberとして表示
ddddd 各システムの短い日付形式の設定に従って表示
(例:2024/12/31)
dddddd 各システムの長い日付形式の設定に従って表示
(例:2024年12月31日)

時刻に使用できる文字

文字 説明
h 先頭にゼロを付けずに0から23の数値で時間を表示
hh 先頭にゼロを付けて00から23の数値で時間を表示
n 先頭にゼロを付けずに0から59の数値で分を表示
nn 先頭にゼロを付けて00から59の数値で分を表示
s 先頭にゼロを付けずに0から59の数値で秒を表示
ss 先頭にゼロを付けて00から59の数値で秒を表示
ttttt 各システムの長い時間形式の設定に従って表示
(例:10:20:30)
AM/PM 12時間形式を使用し、午前にAM、午後にPMを表示
am/pm 12時間形式を使用し、午前にam、午後にpmを表示
A/P 12時間形式を使用し、午前にA 、午後にPを表示
a/p 12時間形式を使用し、午前にa 、午後にpを表示
AMPM 12時間形式を使用し、午前に”午前” 、午後に”午後”を表示

実際に様々なフォーマットでの出力例を出すサンプルコードを以下にまとめました。

【サンプルコード】

Sub sampleDate2()

 Dim str As String

 str = "2025/01/01 01:02:03"

 MsgBox Format(str, "yy/m/d") & vbCrLf & _
         Format(str, "yyyy/mm/dd") & vbCrLf & _
         Format(str, "ddddd ttttt") & vbCrLf & _
         Format(str, "dddddd") & vbCrLf & _
         Format(str, "h:n:s AM/PM") & vbCrLf & _
         Format(str, "hh:nn:ss AMPM")

End Sub

【実行結果】

日付の西暦と和暦を変換して表示する

書式指定文字を使用して、西暦から和暦に、あるいは和暦から西暦に変換して表示することもできます。

【サンプルコード】

Sub sampleDate3()

  MsgBox Format("2025/01/01", "ge m月d日") & vbCrLf & _
         Format("2025/01/01", "ggee年m月d日") & vbCrLf & _
         Format("2025/01/01", "ggge年m月d日") & vbCrLf & _
         Format("令和7年1月1日", "yyyy/mm/dd")
End Sub

【実行結果】

日付に対応する曜日を表示する

書式指定文字には、曜日を指定できる文字も存在します。

【サンプルコード】

Sub sampleDate4()

  MsgBox Format("2025/01/01", "ddd") & vbCrLf & _
         Format("2025/01/01", "dddd") & vbCrLf & _
         Format("2025/01/01", "aaa") & vbCrLf & _
         Format("2025/01/01", "aaaa")

End Sub

【実行結果】

数値・文字列の表示設定

日時以外の書式を定義する場合は、以下の指定文字を使用します。

文字 説明
0 桁数を指定
対応する位置に数字が存在する場合はその数字が表示され、無ければ0が表示される
# 桁数を指定
対応する位置に数字が存在する場合はその数字が表示され、無ければ何も表示しない
@ 1つの文字またはスペースを表示
対応する位置に文字が存在する場合はその文字が表示され、無ければスペースが表示される
& 1つの文字を表示
対応する位置に文字が存在する場合はその文字が表示され、無ければ詰められる
< 小文字に変換
> 大文字に変換
! プレースホルダーを左から右に向かって埋めるよう設定(既定は右から左)

【サンプルコード】

Sub sampleStr1()

  Dim str As String

  str = "ABC"

  MsgBox Format(str, "@、@、@") & vbCrLf & _
         Format(str, "@@") & vbCrLf & _
         Format(str, "@@@") & vbCrLf & _
         Format(str, "@@@@@") & "です" & vbCrLf & _
         Format(str, "!@@@@@") & "です" & vbCrLf & _
         Format(str, "&&&&&") & "です"

End Sub

【実行結果】

0(ゼロ)埋めをして数値を表示する

0(ゼロ)埋めで数値を表示する場合は以下のように記述します。

【サンプルコード】

Sub sampleStr2()

    Dim str As String

    str = "123"
    
    MsgBox Format(str, "00") & vbCrLf & _
           Format(str, "000") & vbCrLf & _
           Format(str, "0000") & vbCrLf & _
           Format(str, "00000")

End Sub

【実行結果】

小数点以下の桁数を設定する

小数点以下の桁数を設定する方法について確認してみましょう。

【サンプルコード】

Sub sampleStr3()

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

End Sub

【実行結果】

指定の桁数以下の数字は四捨五入されます。

文字列の表示を設定する

文字の大小を変換する方法について確認してみましょう。

【サンプルコード】

Sub sample4()

    Dim str1 As String, str2 As String

    str1 = "HELLO"
    str2 = "hello"
    
    MsgBox Format(str1, "<") & vbCrLf & Format(str2, ">")

End Sub

【実行結果】

Format関数を使う際の注意点

Format関数で返される値は、数値などではなく文字列である点に注意が必要です。

例えば、返却された値をIf構文の判定に使用する際は、以下のように 「””」で囲み文字列として比較する必要があります。

【処理内容の例】

If Format(Cells(1, 1), "m") = "5" Then
    処理内容
End If

日時を数値で扱いたい場合、日付であれば「Year関数、Month関数、Day関数」を、時刻であれば「Hour関数、Minute関数、Second関数」を使用する方法があります。

状況に応じて使い分けるといいでしょう。

まとめ

Format関数はVBAを扱う上でとても重要な関数です。

使いこなせるようになるまで、ぜひ頑張ってみてください!

関連記事

VBAの勉強方法は?

書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。

ただ、VBAに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。

プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。

<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~

このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。

     

Otherカテゴリの最新記事