- - PR -
日付の計算について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-08-15 10:33
WIndowsXP VB2005_ExpressEditionを使っている新人です。
ある工事現場から次のような依頼があり検討しています。 発行済み資材出庫伝票データに工事着手日から何ヶ月目の伝票か を経過月数別に伝票形式で表示して欲しい。 上記の計算を次のようなコードで試作し、正常に動作しています。 ただし枚数が多くなると画面表示が遅くなり、あまりすっきりした 手順ではないように感じています。何かよいアイデアがあれば ご指導下さい。(nn:経過月数、条件:経過月数<12) If 伝票月日 < 着手日.AddMonths(1) Then nn = 1 ElseIf 伝票月日 < 着手日.AddMonths(2) Then nn = 2 ElseIf 伝票月日 < 着手日.AddMonths(3) Then nn = 3 ElseIf 伝票月日 < 着手日.AddMonths(4) Then nn = 4 ElseIf 伝票月日 < 着手日.AddMonths(5) Then nn = 5 ElseIf 伝票月日 < 着手日.AddMonths(6) Then nn = 6 ElseIf 伝票月日 < 着手日.AddMonths(7) Then nn = 7 ElseIf 伝票月日 < 着手日.AddMonths( Then nn = 8 ElseIf 伝票月日 < 着手日.AddMonths(9) Then nn = 9 ElseIf 伝票月日 < 着手日.AddMonths(10) Then nn = 10 ElseIf 伝票月日 < 着手日.AddMonths(11) Then nn = 11 Else nn = 12 End If 以上です。 | ||||||||
|
投稿日時: 2007-08-15 10:58
画面表示が遅くなるのは、このロジックが原因という検証は取れていますか?
まだだったら、どこに時間がかかっているのか、まずは Debug.Print などで計測してみませう。表示編集に時間がかかっていたりするかも。 掲示のロジック自体は For 〜 Next とか Do 〜 Loop を使うとコンパクトにまとまる筈。 | ||||||||
|
投稿日時: 2007-08-15 11:17
まるくさん、早速のご解答ありがとうございました。
ご指摘の「どこに時間がかかっているのかの検証・・・・・」は行っていません。 このロジックを記述しているときから、なんとなくやぼったく感じていましたので もっと簡便な(例えば2つの日付けの間隔を月単位で求められるような関数)方法 があることを予測して質問しました。(私の調べではないのですが?) For 〜 Next とか Do 〜 Loop にするとロジックはコンパクトになりますが、処理速度は、同程度と考えます。 また、まるくさんの助言でロジックの処理速度を Debug.Print などで計測出来る ことをしりました。今後のためにも勉強し、計測してみます。 ありがとうございました。 | ||||||||
|
投稿日時: 2007-08-15 14:12
あぁ、そうですね。 日付間隔を求めるのだったらとりあえず DateAndTime.DateDiff とかありますね。 | ||||||||
|
投稿日時: 2007-08-15 14:59
まるくさん。ありがとうございました。
早速、DateAndTime.DateDiff モジュールをヘルプで調べました。 そして、例示掲載しました25行のコードを下の関数と入れ替えて正常に動作 することを確認いたしました。 nn = DateDiff("m", 着手日 ,伝票月日) + 1 私は、逆引き500の極意(教本)から DateTimeクラスのSubtract メソッド (日付のみで月の間隔はありません)しか見つけられず25行も記述したので すが、この辺の関数やモジュールを見つけるコツは、やはり経験なのでしょう か。よい方法がありましたらご伝授下さい。 [ メッセージ編集済み 編集者: だんじり 編集日時 2007-08-15 15:58 ] [ メッセージ編集済み 編集者: だんじり 編集日時 2007-08-15 15:59 ] [ メッセージ編集済み 編集者: だんじり 編集日時 2007-08-15 16:32 ] | ||||||||
|
投稿日時: 2007-08-15 15:08
[ メッセージ編集済み 編集者: だんじり 編集日時 2007-08-15 16:00 ] | ||||||||
|
投稿日時: 2007-08-15 15:13
[ メッセージ編集済み 編集者: だんじり 編集日時 2007-08-15 16:00 ] | ||||||||
|
投稿日時: 2007-08-15 17:10
↑どうでもいいけどこれはVB6のコードなんでは?(^^;;
本だったら、目次をくまなく読むぐらいですかね。Googleの方が早かったり。 http://www.google.co.jp/search?hl=ja&q=%E6%97%A5%E4%BB%98%E3%81%AE%E5%B7%AE%E5%88%86+.NET&btnG=Google+%E6%A4%9C%E7%B4%A2&lr= |