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も使用できますが、
使用する必要はまったくありません。