View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
Don Guillett Don Guillett is offline
external usenet poster
 
Posts: 10,124
Default Looping through records

Try this. You may have to adjust the columns.
Hard to tell since you did not provide sample data. with before/after
Loops for each in col B and does NOT select

Sub ComputeHrsSAS()
Dim StdHrs As Long
Dim OT1Hrs As Long
Dim OT2Hrs As Long
Dim Hrs As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = 2 To Cells(Rows.Count, "b").End(xlUp).Row
For Each Hrs In Range(Cells(i, "b"), Cells(i, 30))
Select Case Hrs.Value
Case Is 12
StdHrs = StdHrs + 8
OT1Hrs = OT1Hrs + 4
OT2Hrs = OT2Hrs + Hrs.Value - 12
Case Is 8
StdHrs = StdHrs + 8
OT1Hrs = OT1Hrs + Hrs.Value - 8
StdHrs = StdHrs + Hrs.Value
Case Else
End Select

Cells(i, 32).Value = StdHrs
Cells(i, 33).Value = OT1Hrs
Cells(i, 34).Value = OT2Hrs
Next Hrs
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

--
Don Guillett
Microsoft MVP Excel
SalesAid Software

"neil" wrote in message
...
Hi,

I have a list of employees with the hours they have logged during the
month.

I have to split the hours they have logged into Std & OT hours (any hours
over 8 are OT) for each employee for each day. The summary of Std Hours &
OT
hours for each employee is in two columns towards the right of the list.

The layout of the table is
EmpID Day1 Day 2 Day3.... Day31 StdHrs OTHrs



How do I get VBA to do the calculation for me? While I have written the
code
to get the calculation for the first employee, I don't know know how to
move
to the next record for the employee & work the same calculation.


Sub ComputeHrs()
Dim StdHrs As Long
Dim OT1Hrs As Long
Dim OT2Hrs As Long
Dim Hrs As Range


'Selects the 31 day attendance record for the first employee
Range("B2", Range("B2").Offset(0, 30)).Select

For Each Hrs In Selection

Select Case Hrs.Value 12
Case True
StdHrs = StdHrs + 8
OT1Hrs = OT1Hrs + 4
OT2Hrs = OT2Hrs + Hrs.Value - 12
Case False
Select Case Hrs.Value 8
Case True
StdHrs = StdHrs + 8
OT1Hrs = OT1Hrs + Hrs.Value - 8
Case False
StdHrs = StdHrs + Hrs.Value
End Select
End Select

With Range("B2").Select
Selection.Offset(0, 31).Value = StdHrs
Selection.Offset(0, 32).Value = OT1Hrs
Selection.Offset(0, 33).Value = OT2Hrs
End With
Next Hrs

End Sub