VBA入門
第45回.VBA関数(Format)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2019-07-10

第45回.VBA関数(Format)


VBAのFormat関数は、指定した書式に変換した文字列を返す関数で、
ワークシート関数のTEXT関数とほぼ同様の機能になります。


Format関数は、非常に使用頻度の高い関数でありマクロVBAにおいては重要かつ必須習得関数です。
Format関数はしっかと使えるようにしておきましょう。

Format関数

第1引数に指定した値を、第1引数以降に指定した書式に変換した文字列の値を返します。
戻り値は、文字列を示すバリアント型(内部処理形式StringのVariant)となります。

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



Expression 必須。必ず指定します。
任意の有効な式。
Format 省略可能。
有効な名前を持つ、またはユーザー定義の書式指定式。
FirstDayOfWeek 省略可能。
週の最初の曜日を指定する定数です。
vbUseSystem 0 NLSAPI設定を使用します。
vbSunday 1 日曜日(既定)
vbMonday 2 月曜日
vbTuesday 3 火曜日
vbWednesday 4 水曜日
vbThursday 5 木曜日
vbFriday 6 金曜日
vbSaturday 7 土曜日
FirstWeekOfYear 省略可能。
年内で、最初の週を指定する定数です。
vbUseSystem 0 NLSAPI設定を使用します。
vbFirstJan1 1 1月1日が含まれる週から開始します(既定)。
vbFirstFourDays 2 4日以上が含まれる最初の週が年の第1週目になります。
vbFirstFullWeek 3 1週間全体が含まれる最初の週がその年の第1週目になります。

Format関数は、概ねワークシート関数のTEXT関数と同様の使い方です。
ただし、書式指定文字においては、すべて同一と言う訳ではありませんので注意して下さい。

以下に、引数Formatに指定するユーザー定義の書式に指定する表示書式指定文字を一覧にしています。
マクロVBAで良く使うものは太字にしてあります。

名前付き日付/時刻書式や名前付き数値書式が用意されていますが、
とても覚えきれるものではないのですし、使う事はほとんどないので説明は省略します。

日付/時刻表示書式指定文字



文字 内容
(:) 時刻の区切り記号です。オペレーティングシステムの国別情報の設定によっては、時刻の区切り記号として他の記号が使用されることがあります。
時刻を時間、分、および秒で区切ることができます。変換後の時刻の区切り記号は、コントロールパネルの設定によって決まります。
(/) 日付の区切り記号です。オペレーティングシステムの国別情報の設定によっては、他の記号が使用されることがあります。
日付を年、月、および日で区切ることができます。
変換後の区切り記号は、コントロールパネルの設定によって決まります。
c dddddおよびtttttの書式で表した日付と時刻を、日付、時刻の順序で返します。
指定された値に小数部がない場合は日付のみ、整数部がない場合は時刻のみを表す文字列を返します。
d 日付を返します。1桁の場合、先頭に0が付きません(1~31)。
dd 日付を返します。1桁の場合、先頭に0が付きます(01~31)。
ddd 曜日を英語(省略形)で返します(Sun~Sat)。
aaa 曜日を日本語(省略形)で返します(日~土)。
dddd 曜日を英語で返します(Sunday~Saturday)。
aaaa 曜日を日本語で返します(日曜日~土曜日)。
ddddd 年、月、日を含む短い形式(コントロールパネルで設定)で表した日付を返します。
既定の短い日付形式は、m/d/yyです。
dddddd 年、月、日を含む長い形式(コントロールパネルで設定)で表した日付を返します。
既定の長い日付形式はmmmmdd,yyyyです。
w 曜日を表す数値を返します(日曜日が1、土曜日が7となります)。
ww その日が一年のうちで何週目に当たるかを表す数値を返します(1~54)。
m 月を表す数値を返します。1桁の場合、先頭に0が付きません(1~12)。
ただし、hやhhの直後にmを指定した場合、月ではなく分と解釈されます。
mm 月を表す数値を返します。1桁の場合、先頭に0が付きます(01~12)。
ただし、hやhhの直後にmmを指定した場合、月ではなく分と解釈されます。
mmm 月の名前を英語(省略形)の文字列に変換して返します(Jan~Dec)。
mmmm 月の名前を英語で返します(January~December)。
oooo 月の名前を日本語で返します(1月~12月)。
q 1年のうちで何番目の四半期に当たるかを表す数値を返します(1~4)。
g 年号の頭文字を返します(M、T、S、H)。
gg 年号の先頭の1文字を漢字で返します(明、大、昭、平)。
ggg 年号を返します(明治、大正、昭和、平成)。
e 年号に基づく和暦の年を返します。1桁の場合、先頭に0が付きません。
ee 年号に基づく和暦の年を2桁の数値を使って返します。
1桁の場合、先頭に0が付きます。
y 1年のうちで何日目に当たるかを数値で返します(1~366)。
yy 西暦の年を下2桁の数値で返します(00~99)。
yyyy 西暦の年を4桁の数値で返します(100~9999)。
h 時間を返します。1桁の場合、先頭に0が付きません(0~23)。
hh 時間を返します。1桁の場合、先頭に0が付きます(00~23)。
n 分を返します。1桁の場合、先頭に0が付きません(0~59)。
nn 分を返します。1桁の場合、先頭に0が付きます(00~59)。
s 秒を返します。1桁の場合、先頭に0が付きません(0~59)。
ss 秒を返します。1桁の場合、先頭に0が付きます(00~59)。
ttttt コントロールパネルで設定されている形式で時刻を返します。
先頭に0を付けるオプションが選択されていて、時刻が午前または午後10時以前の場合、先頭に0が付きます。既定の形式は、h:mm:ssです。
AM/PM 時刻が正午以前の場合は大文字でAMを返し、正午~午後11時59分の間は大文字でPMを返します。
am/pm 時刻が正午以前の場合は小文字でamを返し、正午~午後11時59分の間は小文字でpmを返します。
A/P 時刻が正午以前の場合は大文字でAを返し、正午~午後11時59分の間は大文字でPを返します。
a/p 時刻が正午以前の場合は小文字でaを返し、正午~午後11時59分の間は小文字でpを返します。
AMPM 12時間制が選択されていて、時刻が正午以前の場合は午前を表すリテラル文字列を、正午~午後11時59分の間は午後を表すリテラル文字列を返します。
これらの文字列の設定および"12時間制"の選択は、コントロールパネルで行います。AMPMは大文字、小文字のどちらでも指定できます。既定の形式は、AM/PMです。

数値表示書式指定文字

文字 内容
なし 指定した数値をそのまま返します。
0 桁位置や桁数を指定するときに使います。
引数formatに指定した書式文字列内の表示書式指定文字"0"1つで、数値の1桁を表します。変換対象の数値(式)が、"0"で指定された桁位置を使っている場合は、その桁に該当する値が入ります。
変換対象の数値の桁数が少なく、指定された桁位置に該当する値がない場合は、その桁には0が入ります。
引数expressionに指定した数値の整数部または小数部の桁数が、指定書式内の"0"の桁位置に満たない場合は、その桁位置には0が付加されます。
また、数値の小数部の桁数が小数部に指定した"0"の桁位置を超える場合には、数値の小数部は指定の桁位置に合わせて四捨五入されます。
逆に、整数部の桁数が整数部に指定した"0"の桁位置を超える場合には、整数部は変更されることなく、すべて表示されます。
(#) 桁位置や桁数を指定するときに使います。
引数formatに指定した書式文字列内の表示書式指定文字"#"1つで、数値の1桁を表します。変換対象の数値(expression)が"#"で指定された桁位置を使っている場合は、その桁に該当する値が入ります。
変換対象の数値の桁数が少なく、指定された桁位置に該当する値がない場合は、その桁には何も入りません。
この記号は表示書式指定文字の"0"と同じような働きをしますが、数値の小数部や整数部の桁数が"#"で指定された桁位置に満たない場合に0は挿入されず、その桁には何も入りません。
(.) 表示書式指定文字("0"または"#")と組み合わせて、小数点の位置を指定するときに使います。
表示する桁数を指定するとき、この表示書式指定文字の位置によって、整数部と小数部が区別されます。
指定書式内で"."の左側に"#"だけが指定されている場合は、1未満の数値は小数点記号から始まります。
数値が1未満の場合に小数点記号の左側に常に0が付くようにするには、指定書式内で""の左側に"#"ではなく"0"を指定します。
変換後の小数点記号は、オペレーティングシステムの国別情報の設定によって決まります。
(%) 数値を100倍し、パーセント記号(%)を付けるときに指定します。
(,) 1000単位の区切り記号を挿入するときに指定します。
整数部が4桁以上ある数値については、1000単位の区切り記号が付きます。変換後の1000単位の区切り記号は、オペレーティングシステムの国別情報の設定によって決まります。通常、この表示書式指定文字","の前後に"0"または"#"を指定して使います。この表示書式指定文字","の右側に"0"も"#"も指定しない場合、つまり、整数部の右端にこの表示書式指定文字","を1つ、または2つ以上続けて指定した場合(小数部の表示指定の有無は任意)、変換対象の数値は1000単位で割った値に変換されます。
このとき、値は桁位置の指定に応じて丸められます。たとえば、書式指定文字列として"##0,,"と指定すると、数値100000000(1億)は、100に変換されます。100万未満の数値は0となります。
整数部の右端以外でこの表示書式指定文字","を2つ以上続けて指定した場合は、","を1つ指定したときと同じになります。
(:) 時刻の区切り記号を挿入するときに指定します。時刻を時間、分、秒で区切ることができます。変換後の時刻の区切り記号は、オペレーティングシステムの国別情報の設定によって決まります。
(/) 日付の区切り記号を挿入するときに指定します。
日付を年、月、日で区切ることができます。変換後の区切り記号は、オペレーティングシステムの国別情報の設定によって決まります。
(E-E+e-e+) 指数表記で表すときに指定します。
"E-"、"E+"、"e-"、"e+"のいずれかの右側に"0"または"#"を1つ以上指定すると、数値は指数表記で表され、整数部と指数部の間にeまたはEが挿入されます。
これらの表示書式指定文字の右側に指定する"0"または"#"の数は、指数部の桁数を示します。
"E-"や"e-"を使うと、指数が負の場合にはマイナス記号が付きます。"E+"や"e+"の場合は、指数の正負に合わせてプラス記号かマイナス記号が付きます。
-+$()スペース 指定する文字をそのまま挿入します。
これら以外の表示書式指定文字を挿入するには、その前に円記号(\)を付けるか、ダブルクォーテーション("")で囲みます。
(\) すぐ後に続く1文字をそのまま表示します。
書式指定の中で、特別な意味を持っている"#"または"E"などの文字を文字としてそのまま表示するには、その文字の前に円記号(\)を付けます。
この場合、前に付けた円記号(\)は表示されません。文字をダブルクォーテーション("")で囲んでも、同じです。円記号(\)を挿入するには、円記号(\)を2つ続けて記述します(\\)。
そのままでは挿入できない文字としては、日付や時刻の表示書式指定文字(a、c、d、h、m、n、p、q、s、t、w、y、/、:)、数値の表示書式指定文字(#、0、%、E、e、カンマ、ピリオド)、文字列の表示書式指定文字(@、&、<、>、!)などがあります。
("ABC") ダブルクォーテーション("")で囲まれた文字列は、そのまま挿入されます。書式指定の引数formatに文字列を含めるには、Chr(34)を使って文字列を囲みます。
文字コードではダブルクォーテーション("")は34になります。

文字列表示書式指定文字

文字 内容
@ 1つの文字またはスペースを表します。変換対象expressionの中で@(アットマーク)に対応する位置に文字が存在する場合は、その文字が表示されます。
文字がなければスペースが表示されます。@は、引数formatに指定した書式の中に表示書式指定文字の!(感嘆符)がない限り、右から左の順に埋められます。
& 1つの文字を表します。変換対象expressionの中で&(アンパサンド)に対応する位置に文字が存在する場合は、その文字が表示されます。文字がなければ何も表示せず、詰められて表示されます。
&は、引数formatに指定した書式の中に表示書式指定文字の!(感嘆符)がない限り、右から左の順に埋められます。
< 小文字にします。すべての文字は小文字に変換されます。
> 大文字にします。すべての文字は大文字に変換されます。
! 文字を右から左ではなく、左から右の順に埋めていくように指定します。
この文字を指定しない場合は、右から左の順に埋められます。

Format関数の使用例

例えば、A1セルに、2012/1/28が入っているとして、
MsgBoxFormat(Cells(1,1),"yyyy年mm月dd日")
これで、メッセージボックスに、「2012年01月28日」と表示されます。

A1セルの内容 Format関数 結果
12 Format(Cells(1,1),"000") 012
12345 Format(Cells(1,1),"#,###") 12,345
0.123 Format(Cells(1,1),"0.0%") 12.3%
2013/5/8 Format(Cells(1,1),"yyyy年mm月dd日") 2013年05月08日
2013/5/8 Format(Cells(1,1),"aaa")
10:20:30 Format(Cells(1,1),"hh時mm分ss秒") 10時20分30秒

※セルに出力する場合

マクロVBAでの結果をセルに出力する場合は、セルの表示形式を設定する必要があります。
よくある間違いとして、Format関数で形式を整えてから、セルにいれている場合が見受けられます。

セルの表示形式が文字列になっていない場合においては、
数値・日付の場合は、これは意味の無い処理となってしまいます。
セルに値を入れた時点で、セルの表示形式になってしまいます。

最後に

表示書式指定文字については、数も多く全てを覚えるのは大変ですが、
太字にしたものは、使えるようにして下さい。
セルに色々な値を入れ(B1セルは、表示形式を文字列にしておいてください)
Cells(1,2) = Format(Cells(1,1), "表示書式指定文字")
これで、表示書式指定文字を色々と変えて、結果を確認しながらしっかり覚えて下さい。



同じテーマ「VBA入門」の記事

第42回.セルをコピーするとは
第43回.総合練習問題5
第44回.VBA関数について
第45回.VBA関数(Format)
第46回.VBA関数(日付,DateAdd)
第47回.VBA関数(文字列操作,Replace,InStr,StrConv)
第48回.VBA関数(その他,Fix,Int,Rnd,Round,IsEmpty)
第49回.Like演算子とワイルドカード
第50回.総合練習問題6
第51回.Withステートメント
第52回.オブジェクト変数とSetステートメント


新着記事NEW ・・・新着記事一覧を見る

SQL関数と演算子|SQL入門(12月1日)
データの取得:集約集計、並べ替え(DISTINKT,GROUP BY,ORDER BY)|SQL入門(11月30日)
データの取得:条件指定(SELECT,WHERE)|SQL入門(11月29日)
データの挿入:バルクインサート|SQL入門(11月28日)
データの挿入(INSERT)と全削除|SQL入門(11月26日)
テーブル名変更と列追加(ALTER TABLE)とテーブル自動作成|SQL入門(11月25日)
テーブルの作成/削除(CREATE TABLE,DROP TABLE)|SQL入門(11月24日)
データベースに接続/切断|SQL入門(11月23日)
SQLiteのインストール|SQL入門(11月22日)
SQL入門:VBAでデータベースを使う|エクセルの神髄(11月22日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • VBA関数(Format)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
    掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ