Format関数を使ったのに違う表示形式が自動で適用される件
この自動で表示形式が適用される機能で
イライラすることが間々あります。
何も入力したことのないセルA1に、
次のコードを実行します。
Sub macro110618a() |
実行するとイミディエイトには次のように出力されます。
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"
これで意図した形式で表示されます。
一行分だけコード入力が手間ですが、
入力した値が日付形式である便利さを考えると
たかが一行です。
| 固定リンク
この記事へのコメントは終了しました。

コメント