B-Teck!

お仕事からゲームまで幅広く

【VBA】Format関数

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

expression:フォーマットを設定するデータを設定
format :(省略可能)任意のフォーマットを指定


'--------------------------------------------------------------
'下記の引数については使用頻度が低いので特に書かない
'--------------------------------------------------------------
firstdayofweek :週の始まりの曜日を設定
firstweekofyear:年度の第一週を設定

以下format引数の説明

書式設定文字(数値)
説明
0 数値に対して、0の数分ゼロ埋めを行う
# 数値に対して、存在しない場合は表示をしない
. 小数点の表示設定
% 数値をパーセント表示に変換
\ 書式設定文字等の特殊な文字の前につけることで、そのまま表示をする


下記コード中に出てくるバックスラッシュは\マークとして置き換えて読んでください。

Option Explicit

Sub formatTest()
    Dim testData As String
    Dim testData2 As String
    Dim testData3 As String
    Dim MsgString As String
    
    testData = "19900504"
    testData2 = "1990.0504"
    testData3 = "0.199"
    
    
    MsgString = ""
    MsgString = MsgString & Format(testData, "0000000000") & vbCrLf
    MsgString = MsgString & Format(testData, "##########") & vbCrLf
    MsgString = MsgString & Format(testData2, "0.000") & vbCrLf
    MsgString = MsgString & Format(testData2, "0.000000") & vbCrLf
    MsgString = MsgString & Format(testData3, "0%") & vbCrLf
    MsgString = MsgString & Format(testData3, "0.00%") & vbCrLf
    MsgString = MsgString & Format(testData, "0\\") & vbCrLf
    Debug.Print MsgString
End Sub

f:id:beatdjam:20140806141654p:plain

書式設定文字(文字)
説明
@ 文字列に対して、@の数分半角スペース埋めを行う(右づめ)
& 文字列に対して、存在しない場合は表示をしない
! 文字を左詰めで表記
英語の文字を全て小文字にする
> 英語の文字を全て大文字にする
Option Explicit

Sub formatTest()
    Dim testData As String
    Dim MsgString As String
    
    testData = "TestData"
    
    MsgString = ""
    MsgString = MsgString & "[" & Format(testData, "@@@@@@@@@@") & "]" & vbCrLf
    MsgString = MsgString & "[" & Format(testData, "&&&&&&&&&&") & "]" & vbCrLf
    MsgString = MsgString & "[" & Format(testData, "!@@@@@@@@@@") & "]" & vbCrLf
    MsgString = MsgString & "[" & Format(testData, "<@@@@@@@@@@") & "]" & vbCrLf
    MsgString = MsgString & "[" & Format(testData, ">@@@@@@@@@@") & "]" & vbCrLf
    Debug.Print MsgString
End Sub

f:id:beatdjam:20140806162735p:plain

書式設定文字(年)
説明
g 和暦の年号を(M T S H)で表記
gg 和暦の年号を(明 大 昭 平)で表記
ggg 和暦の年号を(明治 大正 昭和 平成)で表記
e 和暦の年を表記
ee 和暦の年を表記(1桁の場合、先頭をゼロ埋めする)
yy 西暦の年を下二桁表記
yyyy 西暦の年を表記
Option Explicit

Sub formatTest2()
    Dim testData As String
    Dim MsgString As String
    
    testData = "1990/05/04"
    
    MsgString = ""
    MsgString = MsgString & Format(testData, "g") & vbCrLf
    MsgString = MsgString & Format(testData, "gg") & vbCrLf
    MsgString = MsgString & Format(testData, "ggg") & vbCrLf
    MsgString = MsgString & Format(testData, "e") & vbCrLf
    MsgString = MsgString & Format(testData, "ee") & vbCrLf
    MsgString = MsgString & Format(testData, "yy") & vbCrLf
    MsgString = MsgString & Format(testData, "yyyy") & vbCrLf
    Debug.Print MsgString
End Sub

f:id:beatdjam:20140806142644p:plain

書式設定文字(月)
説明
m 月を表記
mm 月を表記(1桁の場合、先頭をゼロ埋めする)
mmm 月を英語の省略形で表記
mmmm 月を英語で表記
oooo 月を日本語で表記
Option Explicit

Sub formatTest3()
    Dim testData As String
    Dim MsgString As String
    
    testData = "1990/01/01"
    
    MsgString = ""
    MsgString = MsgString & Format(testData, "m") & vbCrLf
    MsgString = MsgString & Format(testData, "mm") & vbCrLf
    MsgString = MsgString & Format(testData, "mmm") & vbCrLf
    MsgString = MsgString & Format(testData, "mmmm") & vbCrLf
    MsgString = MsgString & Format(testData, "oooo") & vbCrLf
    Debug.Print MsgString
End Sub

f:id:beatdjam:20140806143343p:plain

書式設定文字(日付)
説明
d 日付を表記
dd 日付を表記(1桁の場合、先頭をゼロ埋めする)
ddd 日付を英語の省略形で表記
dddd 日付を英語で表記
aaa 日付を日本語の省略形で表記
aaaa 日付を日本語で表記
Option Explicit

Sub formatTest4()
    Dim testData As String
    Dim MsgString As String
    
    testData = "1990/01/01"
    
    MsgString = ""
    MsgString = MsgString & Format(testData, "d") & vbCrLf
    MsgString = MsgString & Format(testData, "dd") & vbCrLf
    MsgString = MsgString & Format(testData, "ddd") & vbCrLf
    MsgString = MsgString & Format(testData, "dddd") & vbCrLf
    MsgString = MsgString & Format(testData, "aaa") & vbCrLf
    MsgString = MsgString & Format(testData, "aaaa") & vbCrLf
    Debug.Print MsgString
End Sub

f:id:beatdjam:20140806160815p:plain

書式設定文字(時刻)
説明
h 時間を表記
hh 時間を表記(1桁の場合、先頭をゼロ埋めする)
n 分を表記
nn 分を表記(1桁の場合、先頭をゼロ埋めする)
s 秒を表記
ss 秒を表記(1桁の場合、先頭をゼロ埋めする)
AM/PM 午前、午後を英語で表記(大文字)
am/pm 午前、午後を英語で表記(小文字)
Option Explicit

Sub formatTest5()
    Dim testData As Date
    Dim MsgString As String
    
    testData = "2014/08/01 09:05:01 "
    
    Debug.Print testData
    
    MsgString = ""
    MsgString = MsgString & Format(testData, "h") & vbCrLf
    MsgString = MsgString & Format(testData, "hh") & vbCrLf
    MsgString = MsgString & Format(testData, "n") & vbCrLf
    MsgString = MsgString & Format(testData, "nn") & vbCrLf
    MsgString = MsgString & Format(testData, "s") & vbCrLf
    MsgString = MsgString & Format(testData, "ss") & vbCrLf
    MsgString = MsgString & Format(testData, "AM/PM") & vbCrLf
    MsgString = MsgString & Format(testData, "am/pm") & vbCrLf
    Debug.Print MsgString
End Sub

f:id:beatdjam:20140806161557p:plain