VBA入門
VBA関数(Format)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2021-09-10

第45回.VBA関数(Format)


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


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


Format関数

第1引数に指定した値を、第2引数以降に指定した書式に変換した文字列の値を返します。
戻り値は、文字列を示すバリアント型(内部処理形式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") ダブルクォーテーション("")で囲まれた文字列は、そのまま挿入されます。
ダブルクォーテーションの文字コードはChr(34) をです。


文字列表示書式指定文字

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


Format関数の使用例

例えば、A1セルに、2012/1/28が入っているとして、

MsgBox Format(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回.セルをコピーするとは

・セルをコピーするとは ・上記方法ではコピーできないプロパティ ・.Valueのセル範囲間のコピー ・.Value以外の場合は、セル範囲をセル範囲にコピーは出来ません ・コピー方法の使い分け ・セルのコピー(Copyメソッド)実行時の注意点 ・最後に
第43回.総合練習問題5
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第44回.VBA関数について
・VBA関数の書き方 ・関数の戻り値を使わない場合 ・名前付き引数 ・○○○B関数 ・○○○$関数 ・ワークシート関数との関係 ・自動メンバ表示 ・習得すべき関数 ・最後に
第45回.VBA関数(Format)
第46回.VBA関数(日付,DateAdd)
・日付時刻に関するVBA関数の一覧 ・DateAdd関数の構文 ・DateAdd関数の使用例
第47回.VBA関数(文字列操作,Replace,InStr,StrConv)
・文字列操作に関するVBA関数の一覧 ・Replace関数 ・InStr関数 ・StrConv関数 ・最後に
第48回.VBA関数(その他,Fix,Int,Rnd,Round,IsEmpty)
・数学VBA関数の一覧 ・データ型確認のVBA関数一覧 ・データ型変換のVBA関数一覧
第49回.Like演算子とワイルドカード
・Like演算子 ・パターン文字列式(ワイルドカード、文字リスト、文字範囲) ・Like演算子の使用例 ・正規表現について
第50回.総合練習問題6
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第87回.WorksheetFunction(ワークシート関数を使う)
・ワークシート関数の使い方 ・WorksheetFunctionで使用できる関数 ・個別の関数の使い方 ・関数の結果(戻り値) ・WorksheetFunctionの使用例. ・検索系の関数での日付の扱い ・WorksheetFunctionのエラー対処 ・最後に
第51回.Withステートメント
・Withの構文 ・Withを使った時と使わない時の比較 ・Withの使用例 ・Withのネスト ・Withを使ったときに気を付けるべき書き方 ・Withの使いどころ ・サイト内の参考ページ


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

テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)
イータ縮小ラムダ(eta reduced lambda)|エクセル入門(2023-11-20)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


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



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