Consulting

Results 1 to 18 of 18

Thread: Tracking Steps through an Order

  1. #1
    VBAX Regular babsc01's Avatar
    Joined
    Jun 2004
    Location
    Southaven, MS
    Posts
    53
    Location

    Tracking Steps through an Order

    Hello all...would like some input on this.

    See attachment...for each ORDER NUMBER, I'd like to, somehow, display the elapsed time (using STATION DATE) between each step shown, and another display showing elapsed time between ENTERED and BILLED.

    I'm thinking a User Form, with a list box to select the ORDER NUMBER. The form would also contain fields showing TOTAL ELAPSED TIME (between ENTERED and BILLED) and AVERAGE TIME between each step.

    Would also like to display OVERALL AVERAGE TIME for all ORDER NUMBERS in the range. My attachment is just a smidgen. The actual range I need this for is approx. 47000 lines.

    Any ideas or help with this beast would be appreciated. :cool

  2. #2
    Site Admin
    Jedi Master
    VBAX Guru Jacob Hilderbrand's Avatar
    Joined
    Jun 2004
    Location
    Roseville, CA
    Posts
    3,712
    Location
    This macro will give you the elapsed time in days.


    Option Explicit
     
    Sub ElapsedTime()
    Dim x               As Long
    Dim LastRow         As Long
    Dim StartTime       As Double
    Dim EndTime         As Double
    LastRow = Range("A65536").End(xlUp).Row
        For x = 2 To LastRow
            Select Case Range("C" & x).Text
                Case Is = "ENTERED"
                    StartTime = Range("D" & x).Value
                Case Is = "BILLED"
                    EndTime = Range("D" & x).Value
                    Range("E" & x).Value = EndTime - StartTime
                Case Else
                    Range("E" & x).Value = Range("D" & x).Value - Range("D" & x - 1).Value
            End Select
        Next x
    End Sub

  3. #3
    VBAX Regular babsc01's Avatar
    Joined
    Jun 2004
    Location
    Southaven, MS
    Posts
    53
    Location
    Thanks, Jacob! I will take a look and let you know what happens...

  4. #4
    Site Admin
    Jedi Master
    VBAX Guru Jacob Hilderbrand's Avatar
    Joined
    Jun 2004
    Location
    Roseville, CA
    Posts
    3,712
    Location
    You're Welcome

    If there are any problems let me know.

  5. #5
    VBAX Regular babsc01's Avatar
    Joined
    Jun 2004
    Location
    Southaven, MS
    Posts
    53
    Location
    DRJ...this macro works GREAT!!! Any way to post the result as "X Days, Y Hours" instead of HH:MM?

    I've checked Chip's site (he's the date and time master), but not sure I can fit his lengthy code into the macro.

    Thanks again!

  6. #6
    Site Admin
    Jedi Master
    VBAX Guru Jacob Hilderbrand's Avatar
    Joined
    Jun 2004
    Location
    Roseville, CA
    Posts
    3,712
    Location
    Try this:


    Option Explicit
     
    Sub ElapsedTime()
    Dim x               As Long
    Dim LastRow         As Long
    Dim StartTime       As Double
    Dim EndTime         As Double
    Dim Days            As Long
    Dim Hours           As Long
    Dim ElapsedTime     As String
    LastRow = Range("A65536").End(xlUp).Row
        For x = 2 To LastRow
            Select Case Range("C" & x).Text
                Case Is = "ENTERED"
                    StartTime = Range("D" & x).Value
                Case Is = "BILLED"
                    EndTime = Range("D" & x).Value
                    Range("E" & x).Value = EndTime - StartTime
                Case Else
                    Range("E" & x).Value = Range("D" & x).Value - Range("D" & x - 1).Value
            End Select
            Select Case Range("E" & x).Value
                Case Is = vbNullString
                Case Is >= 1
                    Days = Int(Range("E" & x).Value)
                    Hours = (Range("E" & x) - Days) * 24
                    ElapsedTime = ""
                    If Days = 1 Then
                        ElapsedTime = Days & " Day and "
                        Else
                        ElapsedTime = Days & " Days and "
                    End If
                    If Hours = 1 Then
                        ElapsedTime = ElapsedTime & Hours & " Hour"
                        Else
                        ElapsedTime = ElapsedTime & Hours & " Hours"
                    End If
                    Range("E" & x) = ElapsedTime
                Case Is < 1
                    Hours = (Range("E" & x)) * 24
                    If Hours = 1 Then
                        ElapsedTime = Hours & " Hour"
                        Else
                        ElapsedTime = Hours & " Hours"
                    End If
                    Range("E" & x) = ElapsedTime
            End Select
        Next x
    End Sub

  7. #7
    VBAX Regular babsc01's Avatar
    Joined
    Jun 2004
    Location
    Southaven, MS
    Posts
    53
    Location
    DRJ...most appreciative. Exactly what I was looking for. THANKS!!! Hopefully I'll soon be to the level where I can figure this stuff out myself.

  8. #8
    Site Admin
    Jedi Master
    VBAX Guru Jacob Hilderbrand's Avatar
    Joined
    Jun 2004
    Location
    Roseville, CA
    Posts
    3,712
    Location
    Keep coming here and you will learn how to code in no time.

  9. #9
    Site Admin
    Urban Myth
    VBAX Guru
    Joined
    May 2004
    Location
    Oregon, United States
    Posts
    4,940
    Location
    Or just study Jake's code and his explanation of it. I've found that's one of the best ways to learn. Thanks Jake!

  10. #10
    VBAX Regular babsc01's Avatar
    Joined
    Jun 2004
    Location
    Southaven, MS
    Posts
    53
    Location
    DRJ...one last thing. I'm gonna try it myself, but in case it fails...any easy way to add MINUTES? Thanks!

  11. #11
    Site Admin
    Jedi Master
    VBAX Guru Jacob Hilderbrand's Avatar
    Joined
    Jun 2004
    Location
    Roseville, CA
    Posts
    3,712
    Location
    You can calculate the minutes by multiplying the remaining fractional hours by 60. Multiply by 60 again to get the seconds.

    [VBA]
    Option Explicit

    Sub ElapsedTime()

    Dim x As Long
    Dim LastRow As Long
    Dim StartTime As Double
    Dim EndTime As Double
    Dim Days As Long
    Dim Hours As Long
    Dim Minutes As Long
    Dim ElapsedTime As String

    LastRow = Range("A65536").End(xlUp).Row
    For x = 2 To LastRow
    Select Case Range("C" & x).Text
    Case Is = "ENTERED"
    StartTime = Range("D" & x).Value
    Case Is = "BILLED"
    EndTime = Range("D" & x).Value
    Range("E" & x).Value = EndTime - StartTime
    Case Else
    Range("E" & x).Value = Range("D" & x).Value - Range("D" & x - 1).Value
    End Select
    Select Case Range("E" & x).Value
    Case Is = vbNullString
    Case Is >= 1
    Days = Int(Range("E" & x).Value)
    Hours = Int((Range("E" & x) - Days) * 24)
    Minutes = ((Range("E" & x).Value - Days) * 24 - Hours) * 60
    ElapsedTime = ""
    If Days = 1 Then
    ElapsedTime = Days & " Day "
    Else
    ElapsedTime = Days & " Days "
    End If
    If Hours = 1 Then
    ElapsedTime = ElapsedTime & Hours & " Hour and "
    Else
    ElapsedTime = ElapsedTime & Hours & " Hours and "
    End If
    If Minutes = 1 Then
    ElapsedTime = ElapsedTime & Minutes & " Minute"
    Else
    ElapsedTime = ElapsedTime & Minutes & " Minutes"
    End If
    Range("E" & x) = ElapsedTime
    Case Is < 1
    Hours = Int((Range("E" & x)) * 24)
    Minutes = ((Range("E" & x).Value * 24) - Hours) * 60
    If Hours = 1 Then
    ElapsedTime = Hours & " Hour and "
    Else
    ElapsedTime = Hours & " Hours and "
    End If
    If Minutes = 1 Then
    ElapsedTime = ElapsedTime & Minutes & " Minute"
    Else
    ElapsedTime = ElapsedTime & Minutes & " Minutes"
    End If
    Range("E" & x) = ElapsedTime
    End Select
    Next x

    End Sub
    [/VBA]

  12. #12
    VBAX Regular babsc01's Avatar
    Joined
    Jun 2004
    Location
    Southaven, MS
    Posts
    53
    Location
    As always, thanks so much for the help.

  13. #13
    Site Admin
    Jedi Master
    VBAX Guru Jacob Hilderbrand's Avatar
    Joined
    Jun 2004
    Location
    Roseville, CA
    Posts
    3,712
    Location
    Glad to help.

    So, do you think you will need seconds added or is tracking to the minute enough?

  14. #14
    VBAX Regular babsc01's Avatar
    Joined
    Jun 2004
    Location
    Southaven, MS
    Posts
    53
    Location
    Nope...to the minute will be more than adequate. Thanks!

  15. #15
    VBAX Regular babsc01's Avatar
    Joined
    Jun 2004
    Location
    Southaven, MS
    Posts
    53
    Location
    DRJ...I made one little modification. Replaced "and" with commas to show:

    X Days, Y Hours, Z Minutes

    Now, I'm trying to eliminate the result showing "0 Hours," but having little luck. Any ideas? Thanks.

    [VBA]Option Explicit

    Sub ElapsedTime3()

    Dim x As Long
    Dim LastRow As Long
    Dim StartTime As Double
    Dim EndTime As Double
    Dim Days As Long
    Dim Hours As Long
    Dim Minutes As Long
    Dim ElapsedTime As String

    LastRow = Range("A65536").End(xlUp).Row
    For x = 2 To LastRow
    Select Case Range("C" & x).Text
    Case Is = "ENTERED"
    StartTime = Range("D" & x).Value
    Case Is = "BILLED"
    EndTime = Range("D" & x).Value
    Range("E" & x).Value = EndTime - StartTime
    Case Else
    Range("E" & x).Value = Range("D" & x).Value - Range("D" & x - 1).Value
    End Select
    Select Case Range("E" & x).Value
    Case Is = vbNullString
    Case Is >= 1
    Days = Int(Range("E" & x).Value)
    Hours = Int((Range("E" & x) - Days) * 24)
    Minutes = ((Range("E" & x).Value - Days) * 24 - Hours) * 60
    ElapsedTime = ""
    If Days = 1 Then
    ElapsedTime = Days & " Day, "
    Else
    ElapsedTime = Days & " Days, "
    End If
    If Hours = 1 Then
    ElapsedTime = ElapsedTime & Hours & " Hour, "
    Else
    ElapsedTime = ElapsedTime & Hours & " Hours, "
    End If
    If Minutes = 1 Then
    ElapsedTime = ElapsedTime & Minutes & " Minute"
    Else
    ElapsedTime = ElapsedTime & Minutes & " Minutes"
    End If
    Range("E" & x) = ElapsedTime
    Case Is < 1
    Hours = Int((Range("E" & x)) * 24)
    Minutes = ((Range("E" & x).Value * 24) - Hours) * 60
    If Hours = 1 Then
    ElapsedTime = Hours & " Hour, "
    Else
    ElapsedTime = Hours & " Hours, "
    End If
    If Minutes = 1 Then
    ElapsedTime = ElapsedTime & Minutes & " Minute"
    Else
    ElapsedTime = ElapsedTime & Minutes & " Minutes"
    End If
    Range("E" & x) = ElapsedTime
    End Select
    Next x

    End Sub [/VBA]

  16. #16
    Site Admin
    Jedi Master
    VBAX Guru Jacob Hilderbrand's Avatar
    Joined
    Jun 2004
    Location
    Roseville, CA
    Posts
    3,712
    Location
    This should get rid of any 0 times:

    [vba]
    Option Explicit

    Sub ElapsedTime3()

    Dim x As Long
    Dim LastRow As Long
    Dim StartTime As Double
    Dim EndTime As Double
    Dim Days As Long
    Dim Hours As Long
    Dim Minutes As Long
    Dim ElapsedTime As String

    LastRow = Range("A65536").End(xlUp).Row
    For x = 2 To LastRow
    Select Case Range("C" & x).Text
    Case Is = "ENTERED"
    StartTime = Range("D" & x).Value
    Case Is = "BILLED"
    EndTime = Range("D" & x).Value
    Range("E" & x).Value = EndTime - StartTime
    Case Else
    Range("E" & x).Value = Range("D" & x).Value - Range("D" & x - 1).Value
    End Select
    Select Case Range("E" & x).Value
    Case Is = vbNullString
    Case Is >= 1
    Days = Int(Range("E" & x).Value)
    Hours = Int((Range("E" & x) - Days) * 24)
    Minutes = ((Range("E" & x).Value - Days) * 24 - Hours) * 60
    If Days = 1 Then
    ElapsedTime = Days & " Day, "
    Else
    ElapsedTime = Days & " Days, "
    End If
    If Hours = 1 Then
    ElapsedTime = ElapsedTime & Hours & " Hour, "
    ElseIf Hours = 0 Then
    Else
    ElapsedTime = ElapsedTime & Hours & " Hours, "
    End If
    If Minutes = 1 Then
    ElapsedTime = ElapsedTime & Minutes & " Minute"
    ElseIf Minutes = 0 Then
    Else
    ElapsedTime = ElapsedTime & Minutes & " Minutes"
    End If
    Range("E" & x) = ElapsedTime
    Case Is < 1
    Hours = Int((Range("E" & x)) * 24)
    Minutes = ((Range("E" & x).Value * 24) - Hours) * 60
    If Hours = 1 Then
    ElapsedTime = Hours & " Hour, "
    ElseIf Hours = 0 Then
    Else
    ElapsedTime = Hours & " Hours, "
    End If
    If Minutes = 1 Then
    ElapsedTime = ElapsedTime & Minutes & " Minute"
    ElseIf Minutes = 0 Then
    Else
    ElapsedTime = ElapsedTime & Minutes & " Minutes"
    End If
    Range("E" & x) = ElapsedTime
    End Select
    ElapsedTime = ""
    Next x

    End Sub
    [/vba]

  17. #17
    VBAX Regular babsc01's Avatar
    Joined
    Jun 2004
    Location
    Southaven, MS
    Posts
    53
    Location
    Thanks once again!!!

  18. #18
    Site Admin
    Jedi Master
    VBAX Guru Jacob Hilderbrand's Avatar
    Joined
    Jun 2004
    Location
    Roseville, CA
    Posts
    3,712
    Location
    Glad to help.

    If you need anymore help, or want a clarification on what some of the lines of code are doing let me know.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •