和風スパゲティのレシピ

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

Format関数とTEXT関数の違い

VBA関数Formatとシート関数TEXTの違いを解説します。

同じところ

両者とも「値を指定の表示形式の文字列に変換する関数」です。

以下の二つはどちらも今日の日付をyyyymmdd形式に変換します。

Format(Date, "yyyymmdd")
TEXT(TODAY(),"yyyymmdd")

 
これ以外にも和暦、曜日、時刻、桁区切りカンマや小数点など、
シート上でTEXT関数で行うことはすべてFormat関数で実行可能です。

引数の順番も(元の文字列,"表示形式")となっており、
第1,第2引数は全く同じ型と仕様です。

違うところ

一番実用的な違いとしては、
Format関数のみ「分を表すn」を使用することができます。


両者とも分(minutes)には「m」が割り当てられているのですが、
これは月(month)と被るため、関数上はyとhどちらの後かで判定されます。

Format(○○, "h:mm") ' ←このmは分
Format(○○, "yy/m/d") ' ←このmは月

 
yとhがどちらもない場合は「月」と判定されてしまうため、
「n」のないTEXT関数ではストレートに月だけを取る方法がありません。

Format("10:10", "n分") ' ←mに加えてnも使えるのでOK
TEXT("10:10", "m分") ' ←このmは月判定なのでNG
RIGHT(TEXT("10:10", "hhmm")) ' ←このようにhhmmから右2桁を取り出すしかない

この「分を表すn」を使えるというのが一番の違いですね。


これ以外の違いとしては、Format関数には

  • w:曜日を数値で返す(WeekDay関数と同じような動き)
  • ww:指定日が一年のうち何週目かを返す
  • y:指定日が一年のうち何日目かを返す

というTEXT関数にはない書式指定子を持っています。


そしてこの指定子の挙動を制御するために、

  • 第3引数(FirstDayOfWeek):何曜日を1とするか
  • 第4引数(FirstWeekOfYear):第1週をどう定義するか

がそれぞれ指定できるようになっています。

ただ、これらの変換にはWeekday関数DatePart関数という、
それぞれ専用の関数が用意されています。


わざわざFormatでやるよりそちらを使った方が可読性はよくなるので、
基本はそちらを使えばよいと思います。


それ以外にもFormat関数にはTEXT関数では使えない書式指定子がいくつか用意されていますので、以下をご参考ください。

書式指定子 内容
c dddddと同じくシステムに準拠した日付(デフォルトはyyyy/m/d)
w 曜日を数値で返す
ww 指定日が一年のうち何週目かを返す
y 指定日が一年のうち何日目かを返す
oooo 月を全角数字+月で返す (1 月 ~ 12 月)
q 一年のうち第何四半期化を返す
n 分を返す
nn 分を2桁0埋めして返す
ttttt システムに準拠した時刻

使い分け

ほとんど仕様が違いませんので、

  • Excelで使うならTEXT関数(というかそれしか使えない)
  • VBAで使うならFormat関数

を使っておけばOKです。


一応WorksheetFunction.Textも使用できますが、
使用する必要はまったくありません。