即効テクニック |
セルには表示形式を設定できます。 たとえば、セルに「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」という条件は、誰が見ても「土曜日かどうかを判定している」ということが明らかです。