Excelにおける文字列、日付、数値のフォーマット関数の使い方VBA/マクロ便利Tips

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、指定した表示形式の文字列を返すFormat、指定した表示形式の日付/時刻値を返すFormatDateTime、指定した表示形式の数値を返すFormatNumberについて。

» 2015年04月30日 05時00分 公開
[薬師寺国安PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013


 今回のTipsも関数の使い方について解説する。今回は、「Format」「FormatDateTime」「FormatNumber」という「フォーマット」に関する3つ関数の使い方だ。なお、関数の基本的な使い方については、Tips「コンパイルエラーにならない関数の使い方――括弧の有無、複数の引数、Callステートメント、戻り値、名前付き引数と順番」を参照してほしい。


指定した表示形式の文字列を返すFormat

 「Format」関数は、指定した表示形式の文字列を返す関数だ。

Format関数の書式

Format(値,表示形式)


 「値」には任意の式を指定する。「表示形式」は省略可能だ。定義済み表示形式または表示形式指定文字を指定する。「表示形式」には表1の値を指定する。

表1 「表示形式」に指定する値
説明
# 桁があれば、それを表示する
\\ \記号を表示
yyyy 西暦を表示
mm 月を2桁で表示
dd 日を2桁で表示
h 時を表示
n 分を表示
s 秒を表示
ggg 年号を表示
ee 年を年号で2桁表示
yyyy 西暦を表示
参考:Format Function (Visual Basic for Applications)

 図1のように数値、西暦年を入力したセルと、「変換」ボタンが配置されているとする。

図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
リスト1 「変換」ボタンをクリックして指定した表示形式に変換するマクロ

 指定したセルに入力されている値をFormat関数で、指定した表示形式に変換している。2行目では3桁区切りに変換し、3行目では西暦を「元号」で表示している。

 このリスト1のマクロを「変換」ボタンに関連付け実行した結果が図2だ。

図2 指定した表示形式に変換された

指定した表示形式の日付/時刻値を返すFormatDateTime

 「FormatDateTime」は、日付/時刻値を表す文字列を返す関数だ。

FormatDateTime関数の書式

FormatDateTime(Expression,NamedFormat)


 「Expression」には、変換する表示形式を指定する。「NamedFormat」は省略可能で、表2の値を指定する。

表2 NamedFormatに指定する値
定数 説明
vbGeneralDate 日付や時刻を表示。日付部分を短い日付形式に従って表示する。時刻部分がある場合は長い時刻形式に従って表示する
vbLongDate コンピューターの地域設定で指定されている長い日付形式に従って日付を表示する
vbShortDate コンピューターの地域設定で指定されている短い日付形式に従って日付を表示する
vbLongTime コンピューターの地域設定で指定されている長い時刻形式に従って時刻を表示する
vbShortTime 24 時間制(hh:mm)を使用して時間を表示する
参考:FormatDateTime Function

 図3のように日付の入力されたセルと「実行」ボタンがあったとする。セル「B2」と「B3」は表示形式設定で「文字列」としている。

図3 日付の入力されたセルと「実行」ボタンが配置されている

 「実行」ボタンをクリックして、変換結果の表示されるセル「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
リスト2  日付を変換させるマクロ

 「FormatDateTime」関数を使って、変換する表示形式にセル「B2」と「B3」の値を指定し、「長い日付形式」(2行目)「短い日付形式」(3行目)で「C2」と「C3」のセルに表示している。

 このリスト2のマクロを「実行」ボタンに関連付け実行した結果が図4だ。

図4 指定した表示形式に日付が変換された

指定した表示形式の数値を返すFormatNumber

 「FormatNumber」は、指定した表示形式の数値を返す関数だ。

FormatNumber関数の書式

FormatNumber(Expression,NumDigitsAfterDecimal,IncludeLeadingDigit,UseParensForNegativeNumbers,GroupDigits)


 「Expression」は必須項目で、表示形式を指定する。

 「NumDigitsAfterDecimal」は省略可能で、小数点の右側の桁数を示す数値を表示する。

 「IncludeLeadingDigit」は省略可能で、ゼロを小数の値に表示するかどうかを指定する。

 「UseParensForNegativeNumbers」は省略可能で、負の値にカッコを配置するかどうかを指定する。

 「GroupDigits」は省略可能で、桁区切り記号を使用するかどうかを指定する。

 「IncludeLeadingDigit」「UseParensForNegativeNumbers」「GroupDigits」には次の表3の定数を指定する。

表3 IncludeLeadingDigit、UseParensForNegativeNumbers、GroupDigitsに指定する値
定数 説明
vbTrue
vbFalse
vbUseDefault コンピューターの地域設定からの値を使用する
参考:FormatNumber Function

 図5のように値の入力されたセルと「変換」ボタンがあったとする。「B6」と「B7」はExcelのメニューから表示形式設定で「標準」に設定し、「C6」と「C7」は「文字列」としている。「C6」と「C7」のセルは「文字列」と設定しておかなければ、正常な値が表示されないので注意してほしい。

図5 値の入力されたセルと「変換」ボタンが配置されている

 「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
リスト3 「FormatNumber」関数で指定した形式に変換するマクロ

 セル「C6」には、セル「B6」に入力されている値を「桁区切り記号」を使用して表示している。最後の、「GroupDigits」のみ「vbTrue」を指定している。これで、数値が3桁区切りで表示されるようになる(2行目)。

 セル「C7」にはセル「B7」に入力されている値を、小数点以下を5桁で表示するよう指定している。他の引数は省略している(3行目)。

 リスト3のマクロを「変換」ボタンに関連付け実行した結果が図6だ。

図6 「FormatNumber」関数で指定した形式で表示された

まとめ

 「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.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。