業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、指定した表示形式の文字列を返すFormat、指定した表示形式の日付/時刻値を返すFormatDateTime、指定した表示形式の数値を返すFormatNumberについて。
今回のTipsも関数の使い方について解説する。今回は、「Format」「FormatDateTime」「FormatNumber」という「フォーマット」に関する3つ関数の使い方だ。なお、関数の基本的な使い方については、Tips「コンパイルエラーにならない関数の使い方――括弧の有無、複数の引数、Callステートメント、戻り値、名前付き引数と順番」を参照してほしい。
「Format」関数は、指定した表示形式の文字列を返す関数だ。
Format(値,表示形式)
「値」には任意の式を指定する。「表示形式」は省略可能だ。定義済み表示形式または表示形式指定文字を指定する。「表示形式」には表1の値を指定する。
値 | 説明 |
---|---|
# | 桁があれば、それを表示する |
\\ | \記号を表示 |
yyyy | 西暦を表示 |
mm | 月を2桁で表示 |
dd | 日を2桁で表示 |
h | 時を表示 |
n | 分を表示 |
s | 秒を表示 |
ggg | 年号を表示 |
ee | 年を年号で2桁表示 |
yyyy | 西暦を表示 |
参考:Format Function (Visual Basic for Applications) |
図1のように数値、西暦年を入力したセルと、「変換」ボタンが配置されているとする。
VBE(Visual Basic Editor)を起動して[挿入]から[標準モジュール]を選択し、プロジェクト内に追加されるModule1内にリスト1のマクロを記述する。
Sub Format関数の使い方() Range("J2").Value = Format(Range("J2").Value, "#,###") Range("J3").Value = Format(Range("J3").Value, "gggee年mm月dd日") End Sub
指定したセルに入力されている値をFormat関数で、指定した表示形式に変換している。2行目では3桁区切りに変換し、3行目では西暦を「元号」で表示している。
このリスト1のマクロを「変換」ボタンに関連付け実行した結果が図2だ。
「FormatDateTime」は、日付/時刻値を表す文字列を返す関数だ。
FormatDateTime(Expression,NamedFormat)
「Expression」には、変換する表示形式を指定する。「NamedFormat」は省略可能で、表2の値を指定する。
定数 | 説明 |
---|---|
vbGeneralDate | 日付や時刻を表示。日付部分を短い日付形式に従って表示する。時刻部分がある場合は長い時刻形式に従って表示する |
vbLongDate | コンピューターの地域設定で指定されている長い日付形式に従って日付を表示する |
vbShortDate | コンピューターの地域設定で指定されている短い日付形式に従って日付を表示する |
vbLongTime | コンピューターの地域設定で指定されている長い時刻形式に従って時刻を表示する |
vbShortTime | 24 時間制(hh:mm)を使用して時間を表示する |
参考:FormatDateTime Function |
図3のように日付の入力されたセルと「実行」ボタンがあったとする。セル「B2」と「B3」は表示形式設定で「文字列」としている。
「実行」ボタンをクリックして、変換結果の表示されるセル「C2」と「C3」には、Excelのメニューから「文字色」を「赤」で表示するよう設定している。
VBEを起動して[挿入]から[標準モジュール]を選択し、プロジェクト内に追加されるModule1内にリスト2のマクロを記述する。
Sub FormatDateTime関数の使い方() Range("C2").Value = FormatDateTime(Range("B2").Value, vbLongDate) Range("C3").Value = FormatDateTime(Range("B3").Value, vbShortDate) End Sub
「FormatDateTime」関数を使って、変換する表示形式にセル「B2」と「B3」の値を指定し、「長い日付形式」(2行目)「短い日付形式」(3行目)で「C2」と「C3」のセルに表示している。
このリスト2のマクロを「実行」ボタンに関連付け実行した結果が図4だ。
「FormatNumber」は、指定した表示形式の数値を返す関数だ。
FormatNumber(Expression,NumDigitsAfterDecimal,IncludeLeadingDigit,UseParensForNegativeNumbers,GroupDigits)
「Expression」は必須項目で、表示形式を指定する。
「NumDigitsAfterDecimal」は省略可能で、小数点の右側の桁数を示す数値を表示する。
「IncludeLeadingDigit」は省略可能で、ゼロを小数の値に表示するかどうかを指定する。
「UseParensForNegativeNumbers」は省略可能で、負の値にカッコを配置するかどうかを指定する。
「GroupDigits」は省略可能で、桁区切り記号を使用するかどうかを指定する。
「IncludeLeadingDigit」「UseParensForNegativeNumbers」「GroupDigits」には次の表3の定数を指定する。
定数 | 説明 |
---|---|
vbTrue | 真 |
vbFalse | 偽 |
vbUseDefault | コンピューターの地域設定からの値を使用する |
参考:FormatNumber Function |
図5のように値の入力されたセルと「変換」ボタンがあったとする。「B6」と「B7」はExcelのメニューから表示形式設定で「標準」に設定し、「C6」と「C7」は「文字列」としている。「C6」と「C7」のセルは「文字列」と設定しておかなければ、正常な値が表示されないので注意してほしい。
「FormatNumber」関数で指定した形式に変換するマクロはリスト3になる。
Sub FormatNumber関数の使い方() Range("C6").Value = FormatNumber(Range("B6").Value, vbFalse, vbFalse, vbFalse, vbTrue) Range("C7").Value = FormatNumber(Range("B7").Value, 5) End Sub
セル「C6」には、セル「B6」に入力されている値を「桁区切り記号」を使用して表示している。最後の、「GroupDigits」のみ「vbTrue」を指定している。これで、数値が3桁区切りで表示されるようになる(2行目)。
セル「C7」にはセル「B7」に入力されている値を、小数点以下を5桁で表示するよう指定している。他の引数は省略している(3行目)。
リスト3のマクロを「変換」ボタンに関連付け実行した結果が図6だ。
「Format」関数は、VBAにおいて常に使用される便利な関数だ。金額を3桁区切りで表示したい場合や、西暦表示を元号表示にしたい場合も多々あると思う。この「Format」関数はVBAにはなくてはならない関数ではないだろうか。ぜひ使ってみていただきたい。
「FormatDateTime」「FormatNumber」関数もうまく使って、業務の効率化を行ってほしい。
次回も引き続き、関数について解説する予定だ。お楽しみに。
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。
Copyright © ITmedia, Inc. All Rights Reserved.