ExcelマクロVBA入門 | 第45回.VBA関数(Format) | Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説



最終更新日:2013-05-29

第45回.VBA関数(Format)


VBAのFormat関数は、ワークシートのTEXT関数と同様の機能になります。

VBAのFormat関数は、非常に使用頻度の高い関数であり、マクロVBAにおいては必須習得関数です。


Format関数はしっかと使えるようにしておきましょう。


Format関数

式を指定した書式に変換し、その文字列を示すバリアント型 (内部処理形式 String の Variant) の値を返します。

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


これは、概ねワークシート関数のTEXT関数と同様の使い方です。

ただし、書式指定文字においては、すべて同一と言う訳ではありませんので注意して下さい。

日付/時刻表示書式指定文字
文字 内容
(:) 時刻の区切り記号です。オペレーティング システムの国別情報の設定によっては、時刻の区切り記号として他の記号が使用されることがあります。時刻を時間、分、および秒で区切ることができます。変換後の時刻の区切り記号は、コントロール パネルの設定によって決まります。
(/) 日付の区切り記号です。オペレーティング システムの国別情報の設定によっては、他の記号が使用されることがあります。日付を年、月、および日で区切ることができます。変換後の区切り記号は、コントロール パネルの設定によって決まります。
c ddddd および t t t t t の書式で表した日付と時刻を、日付、時刻の順序で返します。指定された値に小数部がない場合は日付のみ、整数部がない場合は時刻のみを表す文字列を返します。
d 日付を返します。1 桁の場合、先頭に 0 が付きません (1 〜 31)。
dd 日付を返します。1 桁の場合、先頭に 0 が付きます (01 〜 31)。
ddd 曜日を英語 (省略形) で返します (Sun 〜 Sat)。
aaa 曜日を日本語 (省略形) で返します (日〜土)。
dddd 曜日を英語で返します (Sunday 〜 Saturday)。
aaaa 曜日を日本語で返します (日曜日〜土曜日)。
ddddd 年、月、日を含む短い形式 (コントロール パネルで設定) で表した日付を返します。既定の短い日付形式は、m/d/yy です。
dddddd 年、月、日を含む長い形式 (コントロール パネルで設定) で表した日付を返します。既定の長い日付形式は mmmm dd, 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)。
t t t t t コントロール パネルで設定されている形式で時刻を返します。先頭に 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 に指定した書式の中に表示書式指定文字の ! (感嘆符) がない限り、右から左の順に埋められます。
< 小文字にします。すべての文字は小文字に変換されます。
> 大文字にします。すべての文字は大文字に変換されます。
! 文字を右から左ではなく、左から右の順に埋めていくように指定します。この文字を指定しない場合は、右から左の順に埋められます。


以上、ヘルプより。

マクロで良く使うものは、太字にしてあります。

第3、第4引数についての説明は省略します、使う必要が無いでしょう。


使用例

例えば、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秒


表示書式指定文字については、数も多く全てを覚えるのは大変ですが、

太字にしたものは、使えるようにして下さい。

セルに色々な値を入れ、

Cells(1, 2) = Format(Cells(1, 1), "表示書式指定文字")

これで、表示書式指定文字を変えて、確認し覚えて下さい。


※セルに出力する場合
マクロVBAでの結果をセルに出力する場合は、セルの表示形式を設定する必要があります。
よくある間違いとして、Format関数で形式を整えてから、セルにいれている場合が見受けられます。
セルの表示形式が文字列になっていない場合においては、
数値・日付の場合は、これは意味の無い処理となってしまいます。
セルに値を入れた時点で、セルの表示形式になってしまいます。




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

第46回.VBA関数(日付,DateAdd)
第47回.VBA関数(文字列操作,Replace,InStr,StrConv)
第48回.VBA関数(その他,Fix,Int,Rnd,Round,IsEmpty)
第49回.Like演算子とワイルドカード
第50回.総合練習問題6
第51回.Withステートメント
第52回.オブジェクト変数

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

SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
8.マクロって何?VBAって何?|ExcelマクロVBA入門
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.ひらがな⇔カタカナの変換|エクセル基本操作



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

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


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

    ↑ PAGE TOP