Lead

Mar 20 06 1:07 PM

Tags : :

A simple example...

CODE
Sub CopyRows_UseGosub()

     Dim Cell As Range, TargetSheet As String

     With Sheets("Sheet1")
           For Each Cell In .Range("A2", .Range("A" & Rows.Count).End(xlUp))
                 Select Case Cell.Offset(0, 4)
                 Case "Match"
                       TargetSheet = "Sheet2": GoSub DoCopy
                 Case "No Match"
                       TargetSheet = "Sheet3": GoSub DoCopy
                 Case "Part Match"
                       TargetSheet = "Sheet4": GoSub DoCopy
                 Case "Negative Match"
                       TargetSheet = "Sheet5": GoSub DoCopy
                 Case Else
                       TargetSheet = "Sheet6": GoSub DoCopy
                 End Select
           Next
           Exit Sub

DoCopy:
           .Range(Cell.Address, Cell.Offset(0, 2)).Copy _
                       Sheets(TargetSheet).Range("A" & Rows.Count) _
                       .End(xlUp).Offset(1, 0)
           Return

     End With
End Sub


As a comparison, the alternative code below to accomplish exactly the same task is 'wordier', more obscure for a coder to 'read', and it's difficult to ascertain the differences for each case (the only differences being the sheets name)

CODE
Sub CopyRows_NoGosub()

     Dim Cell As Range

     With Sheets("Sheet1")
           For Each Cell In .Range("A2", .Range("A" & Rows.Count).End(xlUp))
                 Select Case Cell.Offset(0, 4)
                 Case "Match"
                       .Range(Cell.Address, Cell.Offset(0, 2)).Copy _
                                   Sheets("Sheet2").Range("A" & Rows.Count) _
                                   .End(xlUp).Offset(1, 0)
                 Case "No Match"
                       .Range(Cell.Address, Cell.Offset(0, 2)).Copy _
                                   Sheets("Sheet3").Range("A" & Rows.Count) _
                                   .End(xlUp).Offset(1, 0)
                 Case "Part Match"
                       .Range(Cell.Address, Cell.Offset(0, 2)).Copy _
                                   Sheets("Sheet4").Range("A" & Rows.Count) _
                                   .End(xlUp).Offset(1, 0)
                 Case "Negative Match"
                       .Range(Cell.Address, Cell.Offset(0, 2)).Copy _
                                   Sheets("Sheet5").Range("A" & Rows.Count) _
                                   .End(xlUp).Offset(1, 0)
                 Case Else
                       .Range(Cell.Address, Cell.Offset(0, 2)).Copy _
                                   Sheets("Sheet6").Range("A" & Rows.Count) _
                                   .End(xlUp).Offset(1, 0)
                 End Select
           Next
     End With
     
End Sub

If I irradiate my cat will that give it eighteen half-lives?

The major part of getting the right answer lies in asking the right question...