[リストへもどる]
一括表示

投稿時間:2002/12/03(Tue) 12:26
投稿者名:アンパンマン
Eメール:
URL :
タイトル:
日付の比較
日付の比較をしたいのですが、
一つは、"2002/01/11"
もう一つは、"2002/1/11" で、
CDateを使って比較しています。

Dim A as String
Dim B as String

A = "2002/01/11"
B = "2002/1/11"

If CDate(A) = CDate(B) Then
  ・
  ・
  ・
こんな感じなんですが、一つの処理に2秒以上かかってしまいす。
もっと速くさせる方法は無いでしょうか?
説明不足で申し訳ありません。

投稿時間:2002/12/03(Tue) 12:47
投稿者名:とろ
Eメール:
URL :
タイトル:
Re: 日付の比較
> こんな感じなんですが、一つの処理に2秒以上かかってしまいす。

If CDate(A) = CDate(B) Then
の部分で2秒以上かかっているのですか?
そのようなことは、ないと思いますが...
日付比較とは関係のない、別のところで時間がかかっているのでは?

例えば、次のコードを実行してみて下さい。
ボタンを押してから、メッセージボックスが表示されるまで、
20秒以上かかるのですか?

Private Sub Command1_Click()
  Dim A As String
  Dim B As String
  Dim i As Integer
  
  For i = 1 To 10
    A = "2002/01/11"
    B = "2002/1/11"
    If CDate(A) = CDate(B) Then
    End If
  Next i
  
  MsgBox "END"
End Sub

投稿時間:2002/12/03(Tue) 13:34
投稿者名:アンパンマン
Eメール:
URL :
タイトル:
Re^2: 日付の比較
早速のお返事ありがとうございます。

2つのファイルを開いて、その中身を比較させています。

ファイルAには、
2002/01/01,5,6,7,8
2002/01/02,9,10,11,12
  ・
  ・
  ・
ファイルBには、
2002/1/1,6,9,7,5
200201/2,45,87,96,12
  ・
  ・
  ・
こんな具合に入っています。

このファイル二つを開いて比較させています。
Do Until EOF(2)

Line Input #1,AファイルDATA
ファイルA = Split(AファイルDATA , "," , -1)

Line Input #2,BファイルDATA
ファイルB = Split(BファイルDATA , "," , -1)

IF CDate(ファイルA(0)) = CDate(ファイルB(0)) Then
   ・
   ・
   ・
  Close #2
  Exit Do
End IF

IF文の中に入ってくる時間が2秒ぐらいかかってしまいます。
一応こんな感じなんですが、わかってもらえたでしょうか?

投稿時間:2002/12/03(Tue) 14:13
投稿者名:よねKEN
Eメール:
URL :http://www5b.biglobe.ne.jp/~yone-ken/
タイトル:
Re^3: 日付の比較
> 2つのファイルを開いて、その中身を比較させています。

この情報は重要ですよ。最初の投稿ではわかりません。
ファイルIOは低速な処理ですから、うまくやらないと格段に時間がかかります。

その2秒かかるという部分の再現可能な必要最小限のコード、
使用データを掲載して下さい。そうでないと当事者ではない我々にはわかりません。
#長くなりすぎるようなら、ここに掲載するのは適切ではないですが・・・

また、2秒かかっているときの、使用マシンのスペック、環境も提示しましょう。

投稿時間:2002/12/03(Tue) 20:10
投稿者名:アンパンマン
Eメール:
URL :
タイトル:
Re^4: 日付の比較
皆さんご迷惑をおかけしました。
何とか上手くできました。

以後気をつける様にします。

投稿時間:2002/12/03(Tue) 21:12
投稿者名:A221
Eメール:
URL :
タイトル:
Re^5: 日付の比較
#本筋からは外れています。

いったいどのようなコードであったのか、非常に興味深く、出来れば、
どのようにして改善したか、フィードバックの意味もこめて開示して欲しい
と望みます。

投稿時間:2002/12/04(Wed) 12:15
投稿者名:アンパンマン
Eメール:
URL :
タイトル:
Re^6: 日付の比較
> #本筋からは外れています。
>
> いったいどのようなコードであったのか、非常に興味深く、出来れば、
> どのようにして改善したか、フィードバックの意味もこめて開示して欲しい
> と望みます。

返信が遅れて、スミマセン。
前よりは、速くなったので、とりあえずこれで行っています。
"2002/01/01"は何もせず、"2002/1/1"をSplit関数を使い
比較しました。

Dim 比較日付 as String
Dim 日付() as String
Dim j as Integer

日付 = Split("2002/1/1", "/", -1)

For j = 1 To 2
    Select Case 日付(j)
    Case 1
        日付(j) = "01"
    Case 2
        日付(j) = "02"
    Case 3
        日付(j) = "03"
    Case 4
        日付(j) = "04"
    Case 5
        日付(j) = "05"
    Case 6
        日付(j) = "06"
    Case 7
        日付(j) = "07"
    Case 8
        日付(j) = "08"
    Case 9
        日付(j) = "09"
    End Select
Next j

比較日付 = 日付(0) & "/" & 日付(1) & "/" & 日付(2)

これで、"2002/01/01"="2002/01/01"になって、
文字列同士の比較になったので、多分速くなったんだと思います。

もしこの他に、何かいい方法があれば、是非教えて下さい。
よろしくお願いします。

投稿時間:2002/12/04(Wed) 13:08
投稿者名:nobu
Eメール:
URL :
タイトル:
Re^8: 日付の比較
> > 日付 = Split("2002/1/1", "/", -1)
> > For j = 1 To 2
> >     Select Case 日付(j)
> >     Case 1
> >         日付(j) = "01"
> >     Case 2
> >         日付(j) = "02"
>
>
> > 比較日付 = 日付(0) & "/" & 日付(1) & "/" & 日付(2)
> > これで、"2002/01/01"="2002/01/01"になって、

" が1ケ抜けていたので削除して再投稿です。


早さはどうか分かりませんが

比較日付 = Format(日付, "yyyy/mm/dd")
...とすればFor文やSelect文は不要では。