こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBAでの日付の表示形式指定について

以下のサイトを参考に、B列に入力するとC列に自動で日付が挿入されるようなVBAを作成し、日付を「07/19」という表示形式にしたかったので、Format関数で指定しました。
http://hpcgi1.nifty.com/kenzo30/b_cbbs/cbbs.cgi?mode=al2&namber=34979&rev=&no=0&P=R&KLOG=226
-----VBA------------
'B列入力で日付自動挿入
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RR As Range
Dim R As Range

Set RR = Intersect(Target, Range("B:B"))
If RR Is Nothing Then Exit Sub

Application.EnableEvents = False
For Each R In RR
If R.Value <> "" Then
R.Offset(, 1).Value = Format(Date,"mm/dd")
Else
R.Offset(, 1).ClearContents
End If
Next
Application.EnableEvents = True
End Sub
---------------------
うまく日付が挿入されるのですが、なぜか表示形式が
「7月19日」と日本語表記になってしまいます。
「セルの書式設定」で「mm/dd」と設定すればいいのかもしれませんが、VBAで設定する方法はないのでしょうか?

投稿日時 - 2009-07-19 13:07:40

QNo.5137642

困ってます

質問者が選んだベストアンサー

質問者のコードの中の始めのほうに
MsgBox Format(Date, "mm/dd")
を入れてみました。ここを通ると
7/19(本日は7月19日)と表示される。もちろんFormat関数を使っているから、文字列だ。
シートで数字文字列(例 全角7+半角/+19でも)のつもりでも数字でも、入力すると、/が入っているので、エクセルの強烈な日付変換(解釈)機能で日付を入力したものとされて、/が1つの月日入力の場合は、シートの地の日付書式の7月19日で表示されてしまう。
この設定がどこに由来するものか小生思い出せないが。
C列の日付書式を2009/7/19の形式に設定していなくても。2009/7/19で入れるとそのまま2009/7/19になるのにね。
ーー
(1)改善策はC列の書式を3/14(エクセルの場合の代表例で有るでしょ)を設定しておく。
(2)コードを下記に変える
R.Offset(0, 1) = Date
R.Offset(0, 1).NumberFormat = "mm/dd"
にする。
エクセルでは日付はヒヅケシリアル値という正整数で、数なので
NumberFormatになっていると思われる。文字列に、ろくな書式設定は無いが、それでもNumberFormatなのだが。
ーー
Set RR = Intersect(Target, Range("B:B"))
なんてむつかしい書き方をしなくても簡単に
If Target.Column=2 Then
で済むのに。

投稿日時 - 2009-07-19 22:52:06

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

回答は出でますが。。。

書式の表示形式は、NumberFormatプロパティですので

>R.Offset(, 1).Value = Format(Date,"mm/dd")

これを以下の2行に変更してみてください。

R.Offset(, 1).NumberFormatLocal = "mm/dd"
R.Offset(, 1).Value = Date
 
以上です。

投稿日時 - 2009-07-19 16:21:21

ANo.1

>「セルの書式設定」で「mm/dd」と設定
の動作をマクロの自動記録で確認してみるとか。

投稿日時 - 2009-07-19 13:45:03

あなたにオススメの質問