4/05/2018

Excel。事務職のExcel VBA その25。表示形式は大切なのです。【Display format】

Excel。事務職のExcel VBA その25。表示形式は大切なのです。

<VBA>

事務職の方でも、少し知っているだけでも現場で助かる、Excel VBA(マクロ)。
今回は、表示形式について考えてみましょう。

次のような構文があります。
Sub 表示形式()
    Dim i As Long
    For i = 3 To 12
        Cells(i, "a").Value = i - 2
    Next
End Sub

これを実行してみると、次のようになります。

このように連番を入力することができましたが、
もしこの範囲に通貨スタイルが設定されていたらどうなるのでしょうか?

実行してみると、

通貨スタイルが設定されているので、当然のことながら、
通貨スタイル付きの連番が入力されたわけですね。

事前にわかっていて設定しているならともかく、
残ってしまった表示形式で設定されてはマズい場合があります。

そこで、表示形式を追加しておくことで、
希望する表示形式で入力することができます。

構文を次のようにしてみましょう。
Sub 表示形式()
    Dim i As Long
    For i = 3 To 12
        Cells(i, "a").NumberFormat = "General"
        Cells(i, "a").Value = i - 2
    Next
End Sub

Cells(i, "a").NumberFormat = "General" を追加しました。
Generalは、G/標準のことを意味します。

では、実行してみましょう。

標準スタイルになりましたね。

おなじみのG/標準であったとしても、
一行加えておくだけで、
事前に残っていた表示形式にならないように防ぐことができます。

【00付きの連番】

そこで、次に考えてみたいのは、ゼロ付き連番を入力する場合です。

ゼロ付き数値は、文字ということになりますから、
文字スタイルの一文を加えて作ってみましょう。

Sub 表示形式()
    Dim i As Long
    For i = 3 To 12
        Cells(i, "b").NumberFormat = "@"
        Cells(i, "b").Value = i - 2
    Next
End Sub

では、実行してみましょう。

NumberFormat = "@" では、文字スタイルにはなったのですが、
ゼロ付き数値にはなっていませんね。

”@”は、あくまでも文字スタイルということだけなので、
修正する必要があります。

Sub 表示形式()
    Dim i As Long
    For i = 3 To 12
      Cells(i, "b").NumberFormat = "000"
      Cells(i, "b").Value = i - 2
    Next
End Sub
とりあえず、実行してみましょう。

ゼロ付き数値にすることができましたね。

NumberFormat = "000" おなじみの表示形式ですね。

NumberFormatは、Excelの表示形式の知識をそのまま、
流用することができますので、たった一行ではありますが、
設定するだけで、簡単にゼロ付き数値の連番を作ることができるのです。

【日付も】

日付についても考えてみましょう。

表示形式を設定する行を入れればいいと考えると、
"yyyy/m/d"という表示形式になるような一行を加えてあえればいいので、
次のように構文を書いてみました。

Sub 表示形式()
    Dim i As Long
    For i = 3 To 12
        Cells(i, "c").NumberFormat = "yyyy/m/d"
        Cells(i, "c").Value = i - 2
    Next
End Sub

では、実行してみましょう。

たしかに、日付スタイルで入力されているのですが、1900/1/1。

そう。シリアル値で1は、1900/1/1なので、
このような結果になってしましました。

なので、次のようにアレンジてみましょう。

Sub 表示形式()
    Dim i As Long
    Dim d As Date
    d = DateSerial(2018, 3, 31)
    For i = 3 To 12
        Cells(i, "c").NumberFormat = "yyyy/m/d"
        Cells(i, "c").Value = d + i - 2
    Next
End Sub

では、実行してみましょう。

シリアル値を考慮してあげれば、
このように簡単に日付を入力することができましたね。

表示形式は、あまり気にしないところではありますが、
用途によっては、いろいろ便利ですので、
入れるようにするといいかもしれませんね。