- PR -

日付の計算について

投稿者投稿内容
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 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

以上です。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-08-15 10:58
画面表示が遅くなるのは、このロジックが原因という検証は取れていますか?
まだだったら、どこに時間がかかっているのか、まずは Debug.Print などで計測してみませう。表示編集に時間がかかっていたりするかも。

掲示のロジック自体は
For 〜 Next
とか
Do 〜 Loop
を使うとコンパクトにまとまる筈。
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-08-15 11:17
まるくさん、早速のご解答ありがとうございました。
ご指摘の「どこに時間がかかっているのかの検証・・・・・」は行っていません。
このロジックを記述しているときから、なんとなくやぼったく感じていましたので
もっと簡便な(例えば2つの日付けの間隔を月単位で求められるような関数)方法
があることを予測して質問しました。(私の調べではないのですが?)

For 〜 Next
とか
Do 〜 Loop
にするとロジックはコンパクトになりますが、処理速度は、同程度と考えます。
また、まるくさんの助言でロジックの処理速度を Debug.Print などで計測出来る
ことをしりました。今後のためにも勉強し、計測してみます。
ありがとうございました。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-08-15 14:12
引用:

もっと簡便な(例えば2つの日付けの間隔を月単位で求められるような関数)方法
があることを予測して質問しました。(私の調べではないのですが?)



あぁ、そうですね。
日付間隔を求めるのだったらとりあえず
DateAndTime.DateDiff
とかありますね。
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 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/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-08-15 15:08


[ メッセージ編集済み 編集者: だんじり 編集日時 2007-08-15 16:00 ]
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-08-15 15:13


[ メッセージ編集済み 編集者: だんじり 編集日時 2007-08-15 16:00 ]
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-08-15 17:10
引用:

nn = DateDiff("m", 着手日 ,伝票月日) + 1


↑どうでもいいけどこれはVB6のコードなんでは?(^^;;

引用:

私は、逆引き500の極意(教本)から DateTimeクラスのSubtract メソッド


本だったら、目次をくまなく読むぐらいですかね。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=

スキルアップ/キャリアアップ(JOB@IT)