和風スパゲティのレシピ

日本語でコーディングするExcelVBA

文字列を指定の表示形式に変換する-Format関数

文字列を指定の表示形式に変換する方法を紹介します。

シート関数の「TEXT」とほぼ同じ仕様のVBA関数、「Format関数」を使用します。

基本構文

変換文字列 = Format(元の文字列, 表示形式)

サンプルコード

' 日付
Range("A1") = Format(Date, "yyyy/mm/dd") ' 2025/12/01
Range("A1") = Format(Date, "m/d (aaa)") ' 12/1 (aaa)
Range("A1") = Format(Date, "yyyymmdd") ' 20251201
Range("A1") = Format(Date, "ge.m.d") ' R7.12.1
Range("A1") = Format(Date, "ggge年m月d日") ' 令和7年12月1日

' yyyymmddを日付に変換
Range("A1") = Format(20251201, "@@@@/@@/@@") ' 2025/12/01

' 曜日
Range("A1") = Format(Date, "ddd") ' Mon
Range("A1") = Format(Date, "aaa") ' 月

' 時刻
Range("A1") = Format(Now, "yyyymmddhhmm") ' 202512010901
Range("A1") = Format(Now, "[h]:mm") ' 経過時間(24h超もカウント)
Range("A1") = Format(Now, "n""分""") ' hがないときもnを使えば分をとれる

' 桁区切りや小数点
Range("A1") = Format(1234.567, "0.00") ' 1234.57(第2位を四捨五入)
Range("A1") = Format(1234, "#,##0") ' 1,234(桁区切りカンマ)
Range("A1") = Format(123.456, "0") ' 123(整数)
Range("A1") = Format(123, "00000") ' 00123(0埋め)

' パーセント
Range("A1") = Format(0.756, "0%") ' 75%
Range("A1") = Format(0.756, "0.0%") ' 75.6%

' 単位や文字列の追加
Range("A1") = Format(1000, "0円") ' 1000円
Range("A1") = Format(Date, "yyyymmdd時点") ' 20251201時点
Range("A1") = Format(9012345678#, "000-0000-0000") ' 電話番号
Range("A1") = Format(1234567, "000-0000") ' 郵便番号

' 大文字小文字変換
Range("A1") = Format("ABC", "<") ' abc
Range("A1") = Format("abc", ">") ' ABC

解説

文字列を指定の表示形式に変換するにはFormat関数を使用します。

シート関数の「TEXT」とほとんど同じ仕様の関数で、

  • 日付をyyyy/m/dやyyyymmdd、和暦に変換
  • 日付から曜日を取得
  • 数値の桁区切り、0埋め、小数点四捨五入
  • 100円や10月1日時点などの文字列挿入

このような用途で使用することができます。


非常に幅広い用途で使う、ExcelVBAの必須関数ですね。


ちなみにFormatがあるため全く必要ないのですが、
WorksheetFunction.Text も一応使用できます。

Left関数があるためWorksheetFunction.Leftなどはないのですが、
なぜかTextは同仕様でもちゃんと実装されているようですね。


TEXT関数とはほとんど同じ仕様の関数ですが、
一応TEXTの上位互換といってよい関数で、
大きく分けて以下の4つのメリットを有します。

  • 「分」をnで表現可能(TEXTはmしか使えないのに月のmと被る)
  • 「w:曜日を数値返す」と、連動する第3引数(FirstDayOfWeek)を持つ
  • 「ww:年内第何週か返す」と、連動する第4引数(FirstWeekOfYear)を持つ
  • その他「q:第何四半期か返す」などの指定子がある


といいつつ「w&第3引数」にはWeekDay関数、
「ww&第4引数」にはDatePart関数という専用関数がそれぞれあるため、
わざわざFormat関数でやる意味は特にありません。


よって、分だけを取りたい場合にnが使えることが、
唯一の上位互換と捉えておけばOKです。

経過分数 = Format(時刻, "n") ' ← これでよい
経過分数 = Right(WorksheetFunction.Text(時刻, "hhmm"), 2)
    ' ↑わざわざhを使ってからそれを消さないと「1月」扱いになって1が返る

 
TEXT関数とFormat関数の細かい違いについてはこちらをどうぞ。
www.limecode.jp