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

解決済みの質問

EXCEL VBAでの日付の表示について

EXCEL2003のVBAを始めたばかりなので、初歩的なことですが、分かる方ぜひ教えてください。

フォーム上に、『取得年月日』という項目をつくり、表示を"H○○.○○.○○"としたいのですが、どのように作成をしたらよいのでしょうか?
ちなみに、その日付を使って更新をしたり、計算をしたりもします。

よろしくお願いします。

投稿日時 - 2006-04-12 11:30:50

QNo.2087128

困ってます

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

#2です。

Private Function 日付(txtname As Long) As String
は標準モジュールですよね。
Publicでないと日付関数がCallできないと思います。

引数ですが
txtname as Date
もしくは
txtname as String
でtxtnameの日付チェックするかにすべきです。

投稿日時 - 2006-04-12 12:40:50

補足

『標準モジュール』などの設定は一切していません。
『ユーザーフォーム』を選択して、テキストボックスやコンボボックス、コマンドボタンを挿入しているだけです。
そして、『取得年月日』テキストボックスをダブルクリックしてそこへコードを入れようとしました。

投稿日時 - 2006-04-12 13:37:17

お礼

ありがとうございました。
txtname as Date
とやってみたら、できました。
助かりました。
これで次に進むことができます。

投稿日時 - 2006-04-12 15:07:06

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

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

回答(7)

ANo.7

こんにちは。

入力を、2006/4/12 としているのであれば

 Private Function 日付(txtname As Long) As String

の引数txtnameの型宣言 As Long を除去してください。

 Private Function 日付(txtname) As String


以上です。

投稿日時 - 2006-04-12 14:46:33

お礼

ありがとうございました。
As Longではいけないのですね?
試してみたところ、できました。
また、o_chi_chiさんのやり方でも大丈夫でした。
助かりました。

投稿日時 - 2006-04-12 15:10:15

ANo.6

日付がlong型で戻り値が文字列!?

? 日付(38819)
2006/04/12

Public Function 日付(ByVal lngHiduke As Long) As String
  日付 = Str(CDate(lngHiduke))
End Function

このような関数を欲しているのでしょうか?
ただし、CDate関数があるので

? CDate(38819)
2006/04/12

とわざわざ日付関数を作成する必要はないと思いますが...

投稿日時 - 2006-04-12 12:42:27

ANo.4

質問の表現で、下記があいまいと思う。
>『取得年月日』という項目をつくり・・
質問が、入力時の質問か、表示〔出力)時の質問か?
(1)表示時の質問
元の日付データはエクセルのセルからとってきて、表示するのですか
(2)入力時の質問
フォームで入力するのか。とすれば、使うコントロールはテキストボックスになると思うが、テキストで受け取れるので、入力次第ではないですか。同入力者に規制を守ってもらうかによる。
  入力文字列ーーエクセルの日付シリアル値(語句の意味判りますか?)-->書式を年号記号つきにする。(この際には多彩な、エクセルVBAの書式が選べてその中にH・・・もある)
それをテキストボックスのTextに戻す。
>その日付を使って更新をしたり、計算をしたりもします・・
どこかのセルに、エクセルの日付シリアル値をぜひ持っておくべきです。そうすると便利です。変換なしに、日数計算や日付の関数が使えるから。

投稿日時 - 2006-04-12 12:34:52

補足

(1)について。
元の日付のデータは、EXCELからとって表示させるのではなく、入力用フォームに入力をします。
(2)について。
もちろん使うコントロールはテキストボックスです。その時の入力規則は、『○○○○/○○/○○』です。

シリアル値は、日付を数字で持たせることですよね?
シリアル値を用いて計算してそれをまた日付に戻してあげると便利・・・ということですね?

投稿日時 - 2006-04-12 13:19:34

お礼

ありがとうございました。
無事に解決することができました。
シリアル値のこと、参考にしたいと思います。

投稿日時 - 2006-04-12 15:11:53

ANo.3

#1です。
すみません、VBAの話でしたね。

投稿日時 - 2006-04-12 11:49:25

補足

はい。紛らわしくてすみません。
アドバイスがありましたら、よろしくお願いします。

投稿日時 - 2006-04-12 12:13:44

ANo.2

VBAで表示形式を設定するのならFORMAT関数です。
詳細はヘルプで確認してください。

取得年月日を日付型変数に格納して表示のみ関数で
変換すればいいのでは。

---
dte取得年月日 = "2006/4/12"
Cells(1,1).Value = Format$(dte取得年月日,"gee.mm.dd")

投稿日時 - 2006-04-12 11:46:15

補足

この表示形式は他にも用いるので、表示を『日付』という名前で設定をしてあげました。

Private Function 日付(txtname As Long) As String
日付 = Format(txtname, "gee.mm.dd")
End Function

次に、取得年月日の日付表示を変換するように下記のようにしてみたのですが、うまくいきません。

Private Sub 取得年月日_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
取得年月日.Value = 日付(取得年月日.Value)
End Sub

投稿日時 - 2006-04-12 12:07:19

ANo.1

まずそのセルに日付を入力します。
今日だったら 4/12 って感じで。
そのセルで右クリックし [セルの書式設定] を選択(これはキーボードから CTRL+1 でも代用できます)。
[表示形式]タブにある[分類]から[日付]を選択し、右側の[種類]にある "H9.3.4" (恐らく一番上にあります)を選択し、[OK]を押してください。

投稿日時 - 2006-04-12 11:44:06

あなたにオススメの質問