Format関数

中級VBA

Format関数

 Format関数は値を、指定した書式の文字列に変換して返す関数です。
日付や数値の単位などで非常によく使われます。

 最もよく使われるのは、第一引数に数値や式、変数。第二引数に書式のフォーマットを指定する方法です。
 Format関数にはたくさんのオプションがありますが、ここでは代表的なものを取り上げることにします。

構文

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

expression
 数値や日付などの変数、数式を指定します。

format
 書式を指定します。省略可能ですが、ほぼ省略することはありません。

firstdayofweek
 省略できます。週の始まりの曜日を表す定数を指定します。

firstweekofyear
 省略できます。年の第 1 週を指定する定数を指定します。

書式オプション

 フォーマットで使われるオプションは次の通りです。

日付・時間

  記号  説 明
yyyy年の値を4桁の数値で表現します。
yy年の値を2桁の数値で表現します。
gg元号を1文字で表現します。(昭・平・令)
ggg元号を1文字で表現します。(昭和・平成・令和)
e元号の年の値を表現します。
eee元号の年の値を2桁で表現します。
m月の値を表現します。
mm月の値を2桁の数値で表現します。
d日付の値を表現します。
dd日付の値を2桁の数値で表現します。
aaa曜日を漢字1文字で表現します。(月・火・水、、、)
h時間の値を表現します。
hh時間の値を2桁の数値で表現します。
n分の値を表現します。
nn分の値を2桁の数値で表現します
s秒の値を表現します。
ss秒の値を2桁の数値で表現します。
/日付の区切値文字
:時間の区切値文字

数値

  記号  説 明
桁位置、桁数の指定。0の位置に値がない場合は0を補完します。
#桁位置、桁数の指定。#の位置に値がない場合は何も無しです。
. (ピリオド)0,#と組み合わせて、小数点の小数点の位置を指定するために使用します。
, (カンマ)0,#と組み合わせて、桁切りに使用します。

使い方

 Format関数を使うときは、セルへの代入で自動変換されてしまい、値が変化する事があるので注意が必要です。

 Debug.Printでどのように変換されるか確認してみます。結果は、文字列としてイミディエイトウィンドウに出力されます。

Debug.Print Format(Date, "ggge年mm月dd日(aaa)")
Debug.Print Format(Date, "締め切り yyyy/mm/dd")
Debug.Print Format(Time, "hh:nn:ss")
Debug.Print Format(Time, "h時間n分s秒")

 結果は、それぞれ以下のようになります。
  令和4年11月22日(火)
  締め切り 2022/11/22
  10:00:35
  10時間0分35秒

次は数値です。

Debug.Print Format(0.1, "0.00")
Debug.Print Format(0.1, "#.##")

結果は、以下のようになります。
  0.10
  .1

今度は、セルに代入します。

 Range("A1") = Format(0.1, "0.00")
 Range("A2") = Format(0.1, "#.##")

 A1とA2のセルの値は自動変換され、「0.1」と表示されてしまいます。
これは、セルに代入した際に自動変換されるためです。

 思った通りに反映させるにはセルの書式設定を変更する必要があります。
(そもそもFormat関数は不要になりますが、、、)

Range("A5").NumberFormatLocal = "0.00"
Range("A5") = 0.1
Range("A6").NumberFormatLocal = "#.##"
Range("A6") = 0.1

まとめ

 Format関数は、引数に値、書式を与えると、文字列を返してくれます。ただ、セルに代入する際に自動変換されてしまうので、この点に要注意です。思い通りにならない時は、これを疑いましょう。


タイトルとURLをコピーしました