即効テクニック

関数関連のテクニック

Format関数でできること

(Excel 97/2000/2002/2003/2007)
セルには表示形式を設定できます。
たとえば、セルに「1234」と入力して「#,##0」の表示形式を設定すると、セル内のデータは変化せず、セルの表示だけが「1,234」となります。
このように、表示形式を設定した結果をVBAで取得するときは、Format関数を使います。

Sub Sample1()
    MsgBox Format(1234, "#,##0")
End Sub
表示形式と言えば日付関係ですね。もちろん、日付も変換できます。
Sub Sample2()
    MsgBox Format(Now, "ggge年m月d日")
End Sub
このFormat関数は「表示形式と同じ機能」と言われることがありますが、実は、表示形式では使えない独自の書式記号も持っています。 たとえば、大文字/小文字の変換が可能です。
Sub Sample3()
    Dim buf As String
    buf = "Microsoft Excel"
    MsgBox Format(buf, ">")  ''大文字に変換
    MsgBox Format(buf, "<")  ''小文字に変換
End Sub
文字列の書式記号である「@」は、表示形式とは異なる働きをします。 実際に下記のコードを実行して、実行結果をご確認ください。
Sub Sample4()
    Dim buf As String
    buf = "ABC"
    MsgBox Format(buf, "@は@の@です") & vbCrLf & _
           Format(buf, "@@@@@") & vbCrLf & _
           Format(buf, "@@@@@@") & vbCrLf & _
           Format(buf, "!@@@@@@")   ''文字を左から埋める
End Sub
元の値がシリアル値だった場合、日付に関する次のような書式記号を使えます。 「ww」は分析ツールアドインを組み込んだときワークシート上で使えるWEEKNUM関数と同じですね。 「q」で取得できる四半期は、例によって1月始まりです。 期首の月を自由に設定できれば使いやすいんですけどね。 中には他の関数などで取得できるものもありますが、覚えておいて損はありません。 一般的によくやる操作で、Format関数が便利なのは曜日の判定です。 たとえば、任意の日付が「土曜日かどうか」を判定したい場合は、Weekday関数を使う方法が有名ですね。
Sub Sample5()
    If Weekday(Now) = 7 Then
        MsgBox "土曜日です"
    Else
        MsgBox "他の曜日です"
    End If
End Sub
しかし、Weekday関数の返り値で「7」が土曜ということを記憶している人は多くありません。 「If Weekday(Now) = 7 Then」の部分が、間違いなく「土曜かどうか」を判定しているか、コードを見ただけで、瞬時に読み取れるとは限りません。 こんなときは、Format関数で判定すれば、可読性が飛躍的に向上します。
Sub Sample6()
    If Format(Now, "aaaa") = "土曜日" Then
        MsgBox "土曜日です"
    Else
        MsgBox "他の曜日です"
    End If
End Sub
「If Format(Now, "aaaa") = "土曜日" Then」という条件は、誰が見ても「土曜日かどうかを判定している」ということが明らかです。