VBA code to Filter data and create a new sheet and transfer data to it

前端 未结 1 669
生来不讨喜
生来不讨喜 2021-01-06 12:36

I\'m new to VBA for excel, I\'m trying to do a multiple filter with four criteria on a column containing either of the following strings (trsf ,trf, transfer, trnsf) that is

1条回答
  •  暖寄归人
    2021-01-06 13:05

    I think the code below does everything you're looking for:

    Option Explicit
    Sub BringItAllTogether()
    
    Dim DataSheet As Worksheet, TransfersSheet As Worksheet
    Dim DataRng As Range, CheckRng As Range, _
        TestTRANS As Range, TestTRSF As Range, _
        CopyRng As Range, PasteRng As Range
    
    'make sure the data sheet exists
    If Not DoesSheetExist("DataSheet", ThisWorkbook) Then
        MsgBox ("No sheet named ""DataSheet"" found, exiting!")
        Exit Sub
    End If
    
    'assign the data sheet, data range and check range
    Set DataSheet = ThisWorkbook.Worksheets("DataSheet")
    Set DataRng = DataSheet.Range("$A$1:$H$4630")
    Set CheckRng = DataSheet.Range("$B$1:$B$4630")
    
    'make sure that trans or trsf exists in the check range
    Set TestTRANS = CheckRng.Find(What:="trans", LookIn:=xlValues, LookAt:=xlWhole)
    Set TestTRSF = CheckRng.Find(What:="trsf", LookIn:=xlValues, LookAt:=xlWhole)
    If TestTRANS Is Nothing And TestTRSF Is Nothing Then
        MsgBox ("Could not find ""trans"" or ""trsf"" in column B, exiting!")
        Exit Sub
    End If
    
    'apply autofilter and create copy range
    With DataRng
        .AutoFilter Field:=2, Criteria1:="=*trsf*", Operator:=xlOr, Criteria2:="=*trans*"
    End With
    Set CopyRng = DataRng.SpecialCells(xlCellTypeVisible)
    DataSheet.AutoFilterMode = False
    
    'make sure a sheet named transfers doesn't already exist, if it does then delete it
    If DoesSheetExist("Transfers", ThisWorkbook) Then
        MsgBox ("Whoops, ""Transfers"" sheet already exists. Deleting it!")
        Set TransfersSheet = Worksheets("Transfers")
        TransfersSheet.Delete
    End If
    
    'create transfers sheet
    Set TransfersSheet = Worksheets.Add
    TransfersSheet.Name = "Transfers"
    
    'paste the copied range to the transfers sheet
    CopyRng.Copy
    TransfersSheet.Range("A1").PasteSpecial Paste:=xlPasteAll
    
    End Sub
    
    Public Function DoesSheetExist(SheetName As String, BookName As Workbook) As Boolean
        Dim obj As Object
        On Error Resume Next
        'if there is an error, sheet doesn't exist
        Set obj = BookName.Worksheets(SheetName)
        If Err = 0 Then
            DoesSheetExist = True
        Else
            DoesSheetExist = False
        End If
        On Error GoTo 0
    End Function
    

    0 讨论(0)
提交回复
热议问题