« あるあるエラー:Integer型 | トップページ | PresetTextEffectのビジュアル一覧 »

2011年6月18日 (土)

Format関数を使ったのに違う表示形式が自動で適用される件

この自動で表示形式が適用される機能で
イライラすることが間々あります。

何も入力したことのないセルA1に、
次のコードを実行します。

表示形式が適用されるのを確認するコード:

Sub macro110618a()
'Format関数がオートフォーマットされてしまう
   
    Debug.Print Cells(1, 1).NumberFormatLocal
    Cells(1, 1) = format(Now, "yyyy/mm/dd hh:mm:ss")
    Debug.Print Cells(1, 1).NumberFormatLocal
   
End Sub

実行するとイミディエイトには次のように出力されます。

G/標準
yyyy/m/d h:mm

1行目が入力前、2行目が入力後の表示形式です。
Format関数では、yyyy/mm/dd hh:mm:ss と指定しましたが、
自動で異なる表示形式が適用されました。

次のWebページはこのことについてです。
Excel で文字列または数値が意図しない表示形式に変換される

このページに次のようにあります。

数値にスラッシュ記号 (/) またはハイフン (-) が含まれている場合は、日付形式に変換されることがあ ります。

Format関数の返す値はセルに入れるとき
文字列とみなされ、
文字列から日付形式に変換されるようです。

表示形式が自動的に適用されないようにする方法が
3つ書かれていますので参考にします。

方法1:入力の最初にスペースを入力

Cells(1, 1) = " " & Format(Now, "yyyy/mm/dd hh:mm:ss")

方法2:手動で表示形式を変更

Cells(1, 1) = Format(Now, "yyyy/mm/dd hh:mm:ss")
Cells(1, 1).NumberFormatLocal = "yyyy/mm/dd hh:mm:ss"

方法3:入力の前にアポストロフィを付ける

Cells(1, 1) = "'" & Format(Now, "yyyy/mm/dd hh:mm:ss")

方法1、3の入力後の表示形式は「G/標準」
方法2の入力後の表示形式は指定どおりに、
「yyyy/mm/dd hh:mm:ss」になりました。

方法1、3はセルの見た目は
意図した通りの日付として見えますが、
文字列ですので日付の計算には不向きだと思います。

結局は方法2が無難ではないでしょうか。
そもそもこの方法だとFormat関数を使う必要はありません。

Cells(1, 1) = Now
Cells(1, 1).NumberFormatLocal = "yyyy/mm/dd hh:mm:ss"

これで意図した形式で表示されます。
一行分だけコード入力が手間ですが、
入力した値が日付形式である便利さを考えると
たかが一行です。

|

« あるあるエラー:Integer型 | トップページ | PresetTextEffectのビジュアル一覧 »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: Format関数を使ったのに違う表示形式が自動で適用される件:

« あるあるエラー:Integer型 | トップページ | PresetTextEffectのビジュアル一覧 »