Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3885 / 13646 ツリー ←次へ | 前へ→

【59687】日付の取得 hiro 09/1/2(金) 14:16 質問[未読]
【59688】Re:日付の取得 かみちゃん 09/1/2(金) 14:33 発言[未読]
【59689】Re:日付の取得 hiro 09/1/2(金) 14:58 質問[未読]
【59690】Re:日付の取得 hiro 09/1/2(金) 15:32 発言[未読]
【59692】Re:日付の取得 かみちゃん 09/1/2(金) 21:02 発言[未読]
【59694】Re:日付の取得 hiro 09/1/2(金) 21:34 お礼[未読]

【59687】日付の取得
質問  hiro  - 09/1/2(金) 14:16 -

引用なし
パスワード
   以前こちらで質問して回答をいただいたのですが
1月になってやってみると日付が前の年を
表示しないことに気付きました。
請求書を作成するのに
作成したい月を入力すると
テキストボックスに請求書の開始日と末日を
表示させるものです。
(とりあえずコンボボックスに12月を表示させています)

Private Sub UserForm_Initialize()
cboMonth.Value = "12月"
TextBox1 = Format(DateAdd("m", 0, DateValue(Year(Date) & "年" _
  & cboMonth.Value & "1日")), "YYYY/M/D") '-------請求月の始日を表示
TextBox2 = Format(DateAdd("m", 1, DateValue(Year(Date) & "年" _
  & cboMonth.Value & "1日")) - 1, "YYYY/M/D") '-------請求月の末日を表示
End Sub

よろしくお願いいたします。

【59688】Re:日付の取得
発言  かみちゃん E-MAIL  - 09/1/2(金) 14:33 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>1月になってやってみると日付が前の年を
>表示しないことに気付きました。

年や年度が変わったら、よくある質問です。

原因は、
Year(Date)
としているからです。

仕様を考えてください。

たとえば、現在の日付の1ヶ月前の月を自動表示する場合ですと、以下のような感じ
でできると思います。

Private Sub UserForm_Initialize()
 TextBox1.Value = DateAdd("m", -1, Format(Date, "YYYY/M/1")) '請求月の始日を表示
 TextBox2.Value = CDate(Format(Date, "YYYY/M/1")) - 1 '請求月の末日を表示
End Sub

なお、日付は、パソコンのシステム日付を基準にしていますので、
パソコンの日付を修正してしまう荒業もあります。

【59689】Re:日付の取得
質問  hiro  - 09/1/2(金) 14:58 -

引用なし
パスワード
   ありがとう御座います。
請求月のコンボボックスの表示が
"12月"となっているためにDateValue(Year(Date)
を使っているかと思います。

今回はコンボボックスを12月にしましたが
11月にした場合、日付にそれを反映できない
かと思います。
11月の場合2008/11/1を表示させたいのですが

【59690】Re:日付の取得
発言  hiro  - 09/1/2(金) 15:32 -

引用なし
パスワード
   少し説明不足かと思いますので
追加説明いたします。

請求書の締日が以下のようになっており
5日、10日、15日、20日、25日、末日
翌月になって請求書を発行することが予想される締日は
25日、末日かと思います。

If文を使い
TextBox1 = Format(DateAdd("m", 0, DateValue(Year(Date) - 1 & "年" _
  & cboMonth.Value & "1日")), "YYYY/M/D") '--------請求月の始日を表示
とすれば、前の年で表示されるかと思いますが
If cboMonth = "12月" Then
では末日の夜に作成するときにNGです。
現在日との比較が必要なのかと色々考えても
良い方法が浮かびません。

説明になっているでしょうか?

【59692】Re:日付の取得
発言  かみちゃん E-MAIL  - 09/1/2(金) 21:02 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>請求書の締日が以下のようになっており
>5日、10日、15日、20日、25日、末日
>翌月になって請求書を発行することが予想される締日は
>25日、末日かと思います。

少しよくわからないのですが、以下のような感じではできませんか?

変数dtで、指定された月の1日の日付を生成していますが、
その生成された日付がパソコンのシステム日付より後ろ(2009/12/1など)
であれば、生成された日付の1年前の日付にするという考え方ではいかがでしょうか?

Private Sub UserForm_Initialize()
 Dim dt As Date
 cboMonth.Value = "12月"
 
 dt = CDate(cboMonth.Value & "1日")
 If dt > Date Then
  dt = DateAdd("yyyy", -1, dt)
 End If
 TextBox1.Value = Format(dt, "YYYY/M/D") '請求月の始日を表示
 TextBox2.Value = Format(DateAdd("m", 1, dt) - 1, "YYYY/M/D") '請求月の末日を表示
End Sub

【59694】Re:日付の取得
お礼  hiro  - 09/1/2(金) 21:34 -

引用なし
パスワード
   ありがとう御座います。
おかげで期待通りの動作を得ることが出来ました。

それとかなり長かった構文が
短縮できました。

正月早々ありがとうございました。

3885 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free