+ Reply to Thread
Results 1 to 6 of 6

Change code IF to CASE

Hybrid View

  1. #1
    Valued Forum Contributor marreco's Avatar
    Join Date
    07-02-2011
    Location
    Brazil
    MS-Off Ver
    Excel 2010
    Posts
    1,862

    Change code IF to CASE

    Hi.
    I would like to change this structure IF to CASE.
    can anyone help me?
    Thank you!


    Sub TestCase()
        Dim LR As Long
        Rows(6).Resize(100).Delete
        If Range("a2") = "" And Range("b2") <> "" And Range("c2") <> "" Then
        
        With Sheets("test").UsedRange
            .AutoFilter Field:=3, Criteria1:=Range("b2")
            .AutoFilter Field:=11, Criteria1:=Range("c2")
            .Copy Range("a6")
            .AutoFilter
        End With
        ElseIf Range("a2") <> "" And Range("b2") = "" And Range("c2") <> "" Then
        
        With Sheets("test").UsedRange
            .AutoFilter Field:=1, Criteria1:=Range("a2")
            .AutoFilter Field:=11, Criteria1:=Range("c2")
            .Copy Range("a6")
            .AutoFilter
        End With
        ElseIf Range("a2") <> "" And Range("b2") <> "" And Range("c2") = "" Then
         With Sheets("test").UsedRange
            .AutoFilter Field:=1, Criteria1:=Range("a2")
            .AutoFilter Field:=3, Criteria1:=Range("b2")
            .Copy Range("a6")
            .AutoFilter
        End With
        
        ElseIf Range("a2") = "" And Range("b2") = "" And Range("c2") <> "" Then
         With Sheets("test").UsedRange
            .AutoFilter Field:=11, Criteria1:=Range("c2")
            .Copy Range("a6")
            .AutoFilter
        End With
        
        ElseIf Range("a2") <> "" And Range("b2") = "" And Range("c2") = "" Then
         With Sheets("test").UsedRange
            .AutoFilter Field:=1, Criteria1:=Range("a2")
            .Copy Range("a6")
            .AutoFilter
        End With
        
        ElseIf Range("a2") = "" And Range("b2") <> "" And Range("c2") = "" Then
         With Sheets("test").UsedRange
            .AutoFilter Field:=3, Criteria1:=Range("b2")
            .Copy Range("a6")
            .AutoFilter
        End With
        
        Else
       With Sheets("test").UsedRange
            .AutoFilter Field:=1, Criteria1:=Range("a2")
            .AutoFilter Field:=3, Criteria1:=Range("b2")
            .AutoFilter Field:=11, Criteria1:=Range("c2")
            .Copy Range("a6")
            .AutoFilter
        End With
    
        End If
    End Sub
    Thank's


    Cross-Post
    http://www.excelkey.com/forum/viewto...7&p=3566#p3566
    Last edited by marreco; 03-28-2012 at 07:49 PM.
    "No xadrez nem sempre a menor dist?ncia entre dois pontos ? uma linha reta" G. Kasparov.

    If your problem is solved, please say so clearly, and mark your thread as Solved: Click the Edit button on your first post in the thread, Click Go Advanced, select b from the Prefix dropdown, then click Save Changes. If more than two days have elapsed, the Edit button will not appear -- ask a moderator to mark it.

  2. #2
    Registered User
    Join Date
    02-22-2010
    Location
    Montreal, Canada
    MS-Off Ver
    Excel 2003
    Posts
    36

    Re: Change code IF to CASE

    I'm not sure, but Case won't work with this.

    Case only works on a single data. Your example has 3 fields that needs to be checked, and Case doesn't use Booleans (if not mistaken).

    But you can work around it to some degree, you'll still need a IF though.

    Something like this

    Sub TestCase()
        Dim LR As Long
        Rows(6).Resize(100).Delete
        If Range("a2") = "" And Range("b2") <> "" And Range("c2") <> "" Then DataType = 1
        If Range("a2") <> "" And Range("b2") = "" And Range("c2") <> "" Then DataType = 2
        If Range("a2") <> "" And Range("b2") <> "" And Range("c2") = "" Then DataType = 3
        If Range("a2") = "" And Range("b2") = "" And Range("c2") <> "" Then DataType = 4
        If Range("a2") <> "" And Range("b2") = "" And Range("c2") = "" Then DataType = 5
        If Range("a2") = "" And Range("b2") <> "" And Range("c2") = "" Then DataType = 6
        If Range("a2") <> "" And Range("b2") <> "" And Range("c2") <> "" Then DataType = 7
        
    Select Case DataType
    Case 1
    
    
        With Sheets("test").UsedRange
            .AutoFilter Field:=3, Criteria1:=Range("b2")
            .AutoFilter Field:=11, Criteria1:=Range("c2")
            .Copy Range("a6")
            .AutoFilter
        End With
       
    Case 2
        With Sheets("test").UsedRange
            .AutoFilter Field:=1, Criteria1:=Range("a2")
            .AutoFilter Field:=11, Criteria1:=Range("c2")
            .Copy Range("a6")
            .AutoFilter
        End With
    
    Case 3
         With Sheets("test").UsedRange
            .AutoFilter Field:=1, Criteria1:=Range("a2")
            .AutoFilter Field:=3, Criteria1:=Range("b2")
            .Copy Range("a6")
            .AutoFilter
        End With
        
    Case 4
         With Sheets("test").UsedRange
            .AutoFilter Field:=11, Criteria1:=Range("c2")
            .Copy Range("a6")
            .AutoFilter
        End With
        
    Case 5
        ElseIf Range("a2") <> "" And Range("b2") = "" And Range("c2") = "" Then
         With Sheets("test").UsedRange
            .AutoFilter Field:=1, Criteria1:=Range("a2")
            .Copy Range("a6")
            .AutoFilter
        End With
        
    Case 6
    
         With Sheets("test").UsedRange
            .AutoFilter Field:=3, Criteria1:=Range("b2")
            .Copy Range("a6")
            .AutoFilter
        End With
        
    Case Else
    
       With Sheets("test").UsedRange
            .AutoFilter Field:=1, Criteria1:=Range("a2")
            .AutoFilter Field:=3, Criteria1:=Range("b2")
            .AutoFilter Field:=11, Criteria1:=Range("c2")
            .Copy Range("a6")
            .AutoFilter
        End With
    
    End Select
    End Sub
    Just my suggestion.

  3. #3
    Valued Forum Contributor marreco's Avatar
    Join Date
    07-02-2011
    Location
    Brazil
    MS-Off Ver
    Excel 2010
    Posts
    1,862

    Re: Change code IF to CASE

    The code is generating error 1004

  4. #4
    Valued Forum Contributor marreco's Avatar
    Join Date
    07-02-2011
    Location
    Brazil
    MS-Off Ver
    Excel 2010
    Posts
    1,862

    Re: Change code IF to CASE

    Work fine!!

  5. #5
    Forum Expert
    Join Date
    01-15-2007
    Location
    Brisbane, Australia
    MS-Off Ver
    2007
    Posts
    6,591

    Re: Change code IF to CASE

    Hi

    Same sort of workaround, but without using IF statements

    dim tester as string
    tester = CStr(Len(Range("a2")) = 0) & CStr(Len(Range("b2")) = 0) & CStr(Len(Range("c2")) = 0)
    
    select cast tester
      case "TrueTrueTrue"
    
      case "FalseTrueTrue"
    
    ....
    
    end select
    rylo

  6. #6
    Valued Forum Contributor marreco's Avatar
    Join Date
    07-02-2011
    Location
    Brazil
    MS-Off Ver
    Excel 2010
    Posts
    1,862

    Re: Change code IF to CASE

    Hi. Rylo

    I found it interesting but I think I still would not know the code you got.

    Thank you!!

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

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

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1