文字列を指定の表示形式に変換する方法を紹介します。
シート関数の「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