• ベストアンサー

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

EXCEL2003のVBAを始めたばかりなので、初歩的なことですが、分かる方ぜひ教えてください。 フォーム上に、『取得年月日』という項目をつくり、表示を"H○○.○○.○○"としたいのですが、どのように作成をしたらよいのでしょうか? ちなみに、その日付を使って更新をしたり、計算をしたりもします。 よろしくお願いします。

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

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.5

#2です。 Private Function 日付(txtname As Long) As String は標準モジュールですよね。 Publicでないと日付関数がCallできないと思います。 引数ですが txtname as Date もしくは txtname as String でtxtnameの日付チェックするかにすべきです。

hara88
質問者

お礼

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

hara88
質問者

補足

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

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • taocat
  • ベストアンサー率61% (191/310)
回答No.7

こんにちは。 入力を、2006/4/12 としているのであれば  Private Function 日付(txtname As Long) As String の引数txtnameの型宣言 As Long を除去してください。  Private Function 日付(txtname) As String 以上です。

hara88
質問者

お礼

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

すると、全ての回答が全文表示されます。
noname#22222
noname#22222
回答No.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 とわざわざ日付関数を作成する必要はないと思いますが...

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

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

hara88
質問者

お礼

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

hara88
質問者

補足

(1)について。 元の日付のデータは、EXCELからとって表示させるのではなく、入力用フォームに入力をします。 (2)について。 もちろん使うコントロールはテキストボックスです。その時の入力規則は、『○○○○/○○/○○』です。 シリアル値は、日付を数字で持たせることですよね? シリアル値を用いて計算してそれをまた日付に戻してあげると便利・・・ということですね?

すると、全ての回答が全文表示されます。
  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.3

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

hara88
質問者

補足

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

すると、全ての回答が全文表示されます。
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

VBAで表示形式を設定するのならFORMAT関数です。 詳細はヘルプで確認してください。 取得年月日を日付型変数に格納して表示のみ関数で 変換すればいいのでは。 --- dte取得年月日 = "2006/4/12" Cells(1,1).Value = Format$(dte取得年月日,"gee.mm.dd")

hara88
質問者

補足

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

すると、全ての回答が全文表示されます。
  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.1

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

すると、全ての回答が全文表示されます。

関連するQ&A