【VBA】Format関数の使い方 ~基礎から応用まで実務で使えるテクニック5選を紹介~

 

日付や金額を思い通り表示できない!!複数のセルの表示をまとめて操作したい!!

 

このような問題を抱えていませんか?

 

数値や日付の表示形式を整えるFormat関数は業務効率化に欠かせないツールです。

  • 常に小数点以下2桁まで表示したい
  • 日付を常に西暦表示にしたい
  • 金額表示の最初に¥をつけてカンマもつけたい

 

Format関数を使えば上記のような問題を一瞬で解決することができます。

 

本記事では、Format関数の基本的な使い方から実務での活用例までを徹底解説。

 

請求書作成での金額表示、社内レポートでの日付統一、在庫管理での数値表示など、コピペで使えるサンプルコード紹介しながら実践的な使い方をご紹介しています。

 

Format関数を使いこなしてエクセル業務の効率をアップさせちゃいましょう。

 

 

 

 

広告

Format関数とは?基本的な機能と使い方を解説

 

VBAのFormat関数は、数値や日付を見やすい形式に整形してくれる便利な関数です。

 

エクセルのツールバーにある「表示形式の変更」でも対応できますが、

表示形式が変更されやすい、表示形式を変更するのがめんどう

というデメリットがあります。

 

VBAを使えば、

実行ごとに設定した表示形式に修正されるので理想的な表示形式に保つ

ことができます。

 

Format関数の基本構文と引数の意味

Format関数の基本的な書き方は

Format(出力したい値, “書式文字列")

です。

 

数値を3桁区切りにするサンプルコードはこちら

Dim myNum As Long
myNum = 1234567
MsgBox Format(myNum, "#,##0")

 

上記のサンプルコードを実行すると

1,234,567

という結果になります。

 

ここで重要なのは2つ目の引数である書式文字列の指定方法です。

「#」は省略可能な数字、「0」は必ず表示する数字を表します。

 

Left Caption

ガッツポーズの人

この使いわけはとても重要なので覚えておきましょう。

 

Excel VBAでのFormat関数の位置づけ

Excel VBAの開発において、Format関数は表示形式の制御に欠かせないツールです。

特に、UserFormやメッセージボックスでデータを表示するコードには必ず必要になります。

 

売上データを表示するサンプルコードがこちら

Sub ShowSales()
Dim sales As Double
sales = Range("A1").Value
Label1.Caption = "売上:" & Format(sales, "¥#,##0")
End Sub

 

上記のサンプルコードは

A1セルの数値を売上金額として表示する

という意味です。

 

エクセル上の表示形式の設定に依存せず、一貫した形式でデータを出力する

ことが可能になります。

 

Format関数を使用する際の注意点と制限事項

Format関数の使用には、

変数の型による制限

を注意しなければなりません。

 

たとえば、

日付型のデータを数値形式で表示すると予期せぬ結果になってしまう

ことがあります。

 

変数とFormat関数の表示方法の整合性が合わないサンプルコードがこちら

Dim myDate As Date
myDate = Date
Debug.Print Format(myDate, "#,##0") '意図しない結果になる可能性あり
Debug.Print Format(myDate, "yyyy/mm/dd") '正しい使用例

 

上記サンプルコードは

2行目で日付型の変数を宣言しているにもかかわらず、3行目で数値(カンマ付)での表示を命令する

という内容です。

 

他にも、

大量のデータ処理時にFormat関数を多用すると処理速度が低下する可能性があるので、なるべくFor~Next(繰り返し処理)中に設定しない

というポイントを抑えておきましょう。

 

【実践】Format関数で日付を思い通りに表示させる方法

 

Format関数は日付の表示形式を調整するときによく使われます。

Format関数を活用すれば和暦や西暦、曜日など、必要に応じて自由自在に日付表示を変更可能。

 

セルで表示形式を変更するよりも、形式が変更されにくい、変更の自由度が高いというメリットがあります。

 

日付を和暦形式で表示する具体例

Format関数では「ggg」という書式文字を使うことで和暦表示に変換できます。

 

和暦表示のサンプルコードがこちら

Sub ShowJapaneseDate()
Dim currentDate As Date
currentDate = Date
'和暦表示(令和5年1月1日)
Debug.Print Format(currentDate, "ggg ee年m月d日")
'略式和暦表示(R5.1.1)
Debug.Print Format(currentDate, "g e.m.d")
End Sub

 

上記サンプルコードは、

「令和5年1月1日」と「R5.1.1」を表示する

という内容です。

 

年月日の区切り文字をカスタマイズする方法

Format関数で、日付の区切り文字を用途に応じてカスタマイズすることができます。

スラッシュ、ドット、ハイフンなど、思い通りの表示に設定可能です。

 

3種類の区切りを表示するサンプルコードがこちら

Sub CustomDateSeparator()
Dim myDate As Date
myDate = Date

Debug.Print Format(myDate, "yyyy/mm/dd") 'スラッシュ区切り
Debug.Print Format(myDate, "yyyy-mm-dd") 'ハイフン区切り
Debug.Print Format(myDate, "yyyy.mm.dd") 'ドット区切り
End Sub

 

5行目のコードは「2025/1/1」という表示

6行目のコードは「2025-1-1」という表示

7行目のコードは「2025.1.1」という表示

になります。

 

 

Left Caption

ガッツポーズの人

どんな日付表示にも対応可能。

 

曜日を含めた日付表示のテクニック

曜日の表示は予定表やカレンダーでよく使われ、「dddd」や「ddd」を使って曜日を表示します。

 

曜日を表示するサンプルコードがこちら

Sub DateWithWeekday()
Dim targetDate As Date
targetDate = Date
'完全な曜日表示
Debug.Print Format(targetDate, "yyyy年m月d日 (dddd)") '例:2024年1月30日 (火曜日)
'省略形の曜日表示
Debug.Print Format(targetDate, "yyyy/mm/dd (ddd)") '例:2024/01/30 (火)
End Sub

 

5行目のコードでは「火曜日」と表示

7行目のコードは「火」と表示

になります。

 

数値データを見やすく整形するFormat関数の技

 

Format関数を使うことで、金額表示やパーセント表示など、用途に応じた最適な形式に整形できます。

適切な形式の表示は、わかりやすい資料作りには欠かせないテクニックです。

 

3桁区切りのカンマ表示を実装する方法

金額表示では3桁区切りのカンマ表示が一般的です。

Format関数では「#,##0」という書式を使うことでカンマ区切りを実現できます。

 

カンマ区切りをするサンプルコードがこちら

Sub ShowFormattedNumber()
Dim salesAmount As Long
salesAmount = 1234567890
'基本的なカンマ区切り
Debug.Print Format(salesAmount, "#,##0") '1,234,567,890
'通貨記号付きのカンマ区切り
Debug.Print Format(salesAmount, "¥#,##0") '¥1,234,567,890
End Sub

 

5行目のコードでは「¥」を付けないでカンマ区切りを表示

7行目のコードは「¥」付きのカンマ区切りを表示

になります。

 

小数点以下の桁数を制御するテクニック

計算結果や測定値では、小数点以下の桁数を適切に制御する必要があります。

 

小数点以下の表示桁数を調整するサンプルコードがこちら

Sub DecimalPlaces()
Dim value As Double
value = 123.4567
'小数点以下2桁表示
Debug.Print Format(value, "#,##0.00") '123.46
'小数点以下3桁表示(不要な0は省略)
Debug.Print Format(value, "#,##0.###") '123.457
End Sub

 

5行目のコードでは小数点以下2桁を表示

7行目のコードは小数点以下3桁(最終桁が0の場合省略)を表示

になります。

 

パーセント表示への変換方法

Format関数を使えば、比率や達成率などをパーセント表示することもできます。

 

パーセント表示をするサンプルコードがこちら

Sub PercentageDisplay()
Dim ratio As Double
ratio = 0.8567 '85.67%
'基本的なパーセント表示
Debug.Print Format(ratio, "0.0%") '85.7%
'小数点以下2桁のパーセント表示
Debug.Print Format(ratio, "0.00%") '85.67%
End Sub

 

5行目のコードでは小数点以下1桁のパーセントを表示

7行目のコードは小数点以下2桁のパーセントを表示

になります。

 

実務でよく使うFormat関数の活用例5選

 

実務では、データの表示形式を統一することが非常に重要です。

Format関数は、請求書から勤怠管理まで、様々なエクセル業務で活用されています。

 

実際の業務でよく使うパターンを、具体的なコード例を交えて紹介していきましょう。

 

請求書作成での金額表示の整形方法

請求書や領収書では金額の表示形式を統一が重要です。

 

表示形式を統一するサンプルコードがこちら

Sub InvoiceFormatting()
Dim unitPrice As Long, quantity As Integer
unitPrice = 12500
quantity = 3

'単価の表示
Debug.Print "単価:" & Format(unitPrice, "¥#,##0") '¥12,500

'小計の計算と表示
Dim subTotal As Long
subTotal = unitPrice * quantity
Debug.Print "小計:" & Format(subTotal, "¥#,##0") '¥37,500
End Sub

 

上記サンプルコードでは、

「¥」付きカンマ区切りの表示形式で単価と小計を表示する

という意味です。

 

Left Caption

ガッツポーズの人

VBAを使えば設定した表示形式が崩れる心配がありません。

 

社内向けレポートでの日付表示統一化

社内レポートのような資料では日付の表示形式を統一が重要です。

部署や用途に応じて日付の表示形式が異なることってありますよね。

 

例えば、

本社提出用の書類は「2025年1月1日」で、職場持ち回り用の書類は「令和7年1月1日」という表示にしなければならない暗黙のルールがある。。。

 

Left Caption

疲れ果てた人

この違いを気にするだけでもストレスですよね。。。。

 

こんなストレスを解消するサンプルコードがこちら

Sub ReportDateFormat()
Dim reportDate As Date
reportDate = Date
'本社提出用の書類
Debug.Print Format(reportDate, "yyyy年mm月dd日")
'職場持ち回り用の書類
Debug.Print Format(reportDate, "ggg ee年m月d日")
End Sub

 

VBAで表示形式を設定してしまえば、

違う形式で日付を入力しても正しい表示形式に自動修正するので編集ミスを完全に防止する

ことができます。

 

売上データの集計表示での活用法

売上データの集計では、「¥の表示」「カンマの表示」「パーセントの表示」「小数点以下の桁数の統一」が重要です。

これらの表示形式を常に統一するだけでも見やすい資料となります。

 

データの集計で必要となる表示形式を形成するサンプルコードがこちら

Sub SalesDataFormat()
Dim monthlySales As Long, targetAmount As Long
monthlySales = 123456789
targetAmount = 150000000
'実績値の表示
Debug.Print "売上実績:" & Format(monthlySales, "¥#,##0")
'達成率の計算と表示
Dim achievementRate As Double
achievementRate = monthlySales / targetAmount
Debug.Print "達成率:" & Format(achievementRate, "0.0%")
End Sub

 

桁数の多い数値であっても表示形式が整っていれば、見間違いによるミス防止に繋がります。

 

在庫管理システムでの数値表示テクニック

在庫管理では、数量や単価、金額など様々な数値を扱います。

それぞれの用途に応じた表示形式を心がけましょう。

 

在庫管理においてよく使われる表示形式を形成するサンプルコードがこちら

Sub InventoryManagement()
Dim stockQuantity As Long
Dim unitPrice As Long
Dim reorderPoint As Integer
stockQuantity = 1234
unitPrice = 2500
reorderPoint = 100
'在庫数の表示(3桁区切り)
Debug.Print "在庫数:" & Format(stockQuantity, "#,##0") & "個"
'単価の表示(通貨形式)
Debug.Print "単価:" & Format(unitPrice, "¥#,##0")
'在庫金額の計算と表示
Dim stockAmount As Long
stockAmount = stockQuantity * unitPrice
Debug.Print "在庫金額:" & Format(stockAmount, "¥#,##0")
End Sub

 

上記のサンプルコードは

個数を表す数値にはカンマを表示し、金額を表す数値には「¥」とカンマを表示する

という内容です。

 

勤怠管理での時刻表示の整形方法

勤怠管理において時刻の表示形式を統一することはとても重要です。

 

たとえば、

社員Aは「12時30分」という表示で社員Bは「PM0時30分」という表示。。。

 

Left Caption

疲れ果てた人

これだと勤怠表を確認する方はめちゃくちゃ見づらいですよね。

 

時間や分の表示を統一するサンプルコードがこちら

Sub TimeManagement()
Dim startTime As Date, endTime As Date
startTime = TimeValue("9:30:00")
endTime = TimeValue("18:45:00")
'時刻の表示
Debug.Print "始業:" & Format(startTime, "hh:mm")
Debug.Print "終業:" & Format(endTime, "hh:mm")
'勤務時間の計算と表示
Dim workHours As Date
workHours = endTime - startTime
Debug.Print "勤務時間:" & Format(workHours, "h時間mm分")
End Sub

 

上記サンプルコードは

始業時間と終業時間から勤務時間を算出し、「12時間30分」という表示形式にする

という意味です。

 

Format関数のよくあるエラーと対処法

 

見やすい資料作りには欠かせないFormat関数ですが、導入にはいくつか注意事項があります。

 

「なんでエラーが発生するんだろう。。。」「設定した通りの表示にならない。。。」などの問題が発生しないようポイントを抑えておきましょう。

 

エラーが表示される原因と解決方法

Format関数でよく遭遇するエラーの一つが#ERROR!です。

 

主な原因は

不適切な書式指定や型の不一致

です。

 

文字列を表す変数を宣言しているにも関わらず、Format関数で数値として表示しようとする

とエラーが発生することがあります。

 

これらのエラーを対処するサンプルコードがこちら

Sub ErrorHandling()
On Error Resume Next
Dim testValue As Variant
testValue = "abc"
'数値書式を文字列に適用するとエラー
Debug.Print Format(testValue, "#,##0")
'正しい対処法:値の型をチェックしてから適切な書式を適用
If IsNumeric(testValue) Then
Debug.Print Format(testValue, "#,##0")
Else
Debug.Print "数値以外のデータです"
End If
End Sub

 

8行目から21行目のコードは

数値表示できればそのまま表示し、できなければ「数値以外のデータです」というメッセージを表示する

という内容です。

 

 

想定外の表示結果になる場合の対処法

書式指定が適切でない場合、予期せぬ表示結果になることがあります。

 

データの型と書式が正しくない場合と正しい場合を示したサンプルコードがこちら

Sub UnexpectedResults()
Dim targetDate As Date
targetDate = Now
'不適切な書式指定
Debug.Print Format(targetDate, "#,##0") '意図しない結果
'適切な書式指定
Debug.Print Format(targetDate, "yyyy/mm/dd hh:mm") '正しい結果
End Sub

 

上記サンプルコードは

「日付として宣言された変数を数値として表示させようとするダメなパターン」「日付として宣言された変数を日付として表示させようとする良いパターン」

の2種類を紹介しています。

 

Left Caption

ひらめく人

エラーとして処理が止まらず想定外の形式で表示されることがあるので注意しましょう。

 

パフォーマンスを考慮した実装方法

大量のデータ処理時は、Format関数の使用がパフォーマンスに影響を与える可能性があります。

 

Left Caption

疲れ果てた人

実行してから処理完了までめちゃくちゃ時間がかかることも

Format関数を導入しても処理速度を遅くしないためのサンプルコードがこちら

Sub PerformanceOptimization()
Dim i As Long
Dim results As String
Dim startTime As Double

startTime = Timer

'ループ内でFormat関数を使う(非効率)
For i = 1 To 1000
results = results & Format(i, "000") & vbCrLf
Next i

'改善案:必要な箇所でのみFormat関数を使用
Dim finalResult As String
finalResult = Format(results, "") 'ループの外で一度だけ使用

Debug.Print "処理時間:" & Format(Timer - startTime, "0.000") & "秒"
End Sub

 

8行目から11行目のコードは

1行目から1000行目まで繰り返し処理を行い全てFormat関数を適応する

というパフォーマンス低下に繋がる非効率的な内容です。

 

14行目から15行目のコードは

必要な個所でのみFormat関数を適応する

という効率的な内容です。

 

実務でFormat関数を使う場合、処理速度を低下させない効率的なコード作りを意識しましょう。

 

まとめ:Format関数は実務でめちゃくちゃ活用できる

 

いかがでしたでしょうか。

 

桁数の多い数値を扱う、金額表示のデータを扱う、日付データを扱う、このようなエクセル業務が多いならFormat関数の導入は必須事項です。

 

よく、

「セルの書式設定で表示形式を変更する方が簡単だよ」

とおっしゃる方もいます。

 

確かに、

セルを選択してツールバーにある表示形式の変更で処理した方が手軽

ですよね。

 

私も

「1ヶ月に1回程度しか編集しないようなエクセル」や「今回編集して今後一切使わなくなるエクセル」

には手軽な方法が良いと思います。

 

ですが、

使用頻度の高いエクセルにはVBA作成の手間はかかるけどFormat関数の導入が圧倒的におすすめ

です。

 

Left Caption

疲れ果てた人

表示形式の不揃いが理由で資料を作り直すって凄く非効率的。。。

 

Format関数を使って自動的にキレイな資料が作れるシステムを構築しましょうー。

 

この記事を読んで、

「VBAやってみたい!」「いろんなエクセル業務の自動化に挑戦したい!!」

と感じてくれた方はエクセルVBAの情報を定期的に配信している無料メルマガへの登録を検討してみてください。

 

エクセル業務で苦しんだ私の経験を元に、実務で役立つVBA情報をお届けしています。

 

 

 

この記事が、あなたの業務効率化への第一歩となることを願っています。