2012-02-16 12 views
1
i = 1  
For Each cell In Range("D1:D10000") 
    If IsEmpty(cell.Value) Then Exit For 

    Select Case Range("N" & i).Value 
    Case 0 To 40 
     startTime = "13:00" 
    Case 40 To 60 
     secondTime = Range("V" & i).Value 
    Case 60 To 100 
     finalTime = Range("V" & i).Value 
    Case Else 

    End Select 

    Dim startTime As Date 
    Dim secondTime As Date 
    Dim finalTime As Date 
    Dim timeRef As Date 
    timeRef = Range("V" & i).Value 

    If timeRef >= startTime And timeRef < secondTime Then 

    ElseIf timeRef >= secondTime And timeRef < finalTime Then 

    ElseIf timeRef > finalTime Then 

    End If 
    i = i + 1 
Next 

[OK]ですので、上記のように日付をフォーマットして時刻を比較しようとしています。それらはすべて「hh:mm」という形式のカスタムワークシートから取り出されますが、最終的なものに収まる時間は得られません。elseifVBA時間が2時間の場合

Argh!

答えて

1

値を割り当てた後で値を宣言しています(startTimesecondTimefinalTime)。少なくとも、宣言して割り当てるコードを変更する必要があります。 (また、ステートメントが間違っている、あなたの最初の場合は、最初のテストは、単にIf timeRef < secondTimeでなければなりません。)私はあなたのデータのいずれかに対してテストする必要はありませんので、これは実際に動作するかどう

' Declare variables before assigning values to them 
Dim startTime As Date 
Dim secondTime As Date 
Dim finalTime As Date 
Dim timeRef As Date 

i = 1  
For Each cell In Range("D1:D10000") 
    If IsEmpty(cell.Value) Then Exit For 

    Select Case Range("N" & i).Value 
    Case 0 To 40 
     startTime = "13:00" 
    Case 40 To 60 
     secondTime = Range("V" & i).Value 
    Case 60 To 100 
     finalTime = Range("V" & i).Value 
    Case Else 
     ' You should do something here; what if the cell is empty or invalid? 
     ' You end up with no value assigned to anything when leaving the Select 
    End Select 

    timeRef = Range("V" & i).Value 

    If timeRef < secondTime Then 

    ElseIf timeRef >= secondTime And timeRef < finalTime Then 

    ElseIf timeRef > finalTime Then 

    End If 
    i = i + 1 
Next 

は、私はわかりません、それはを防止する明らかな問題を修正し、が機能しないようにします。

+0

申し訳ありませんが、私は無関係なものをすべて編集し、誤解しました。私は割り当てをする前に宣言し、最初のテストの変更は私が見ることができるものと何の違いも生じなかった – Jordan