В приведенном ниже коде я фильтрую «PENDING: сначала, а затем фильтрую столбцы 10 и 2 в« USA »соответственно. Все отфильтрованные данные копируются. Но теперь я хочу фильтровать по« CANADA »и« USA », но хочу копировать только если ячейка в столбце 10 = "США" и ячейка в столбце 2 = "США" ИЛИ ячейка в столбце 10 = "КАНАДА" и ячейка в столбце 2 = "КАНАДА" Я знаю, как отфильтровать оба " США "и" КАНАДА ". Я хочу знать, где добавить условие If в код.
ub SS()
Dim sourceWorkbook As Workbook
Dim targetWorkbook As Workbook
Dim sourceSheet As Worksheet
Dim targetSheet As Worksheet
Dim sourceWorkbookPath As String
Dim targetWorkbookPath As String
Dim lastRow As Long
Dim lRow As Long, lCol As Long
Dim LastCol As String
' Define workbooks paths
sourceWorkbookPath = "Path 1"
targetWorkbookPath = "Path 2"
' Set a reference to the target Workbook and sheets
Set sourceWorkbook = Workbooks.Open(sourceWorkbookPath)
Set targetWorkbook = Workbooks.Open(targetWorkbookPath)
' definr worksheet's names for each workbook
Set sourceSheet = sourceWorkbook.Worksheets("WEXOS")
Set targetSheet = targetWorkbook.Worksheets("Sheet1")
With sourceSheet
Row = .Range("J" & .Rows.Count).End(xlUp).Row
'~~> Find the empty column after the last column
lCol = .Cells(1, Columns.Count).End(xlToLeft).Column + 1
'~~> Get the column Name
LastCol = Split(Cells(, lCol).Address, "$")(1)
'~~> Insert the formula
.Range(LastCol & "2:" & LastCol & lRow).Formula = "=IF(N2=""PENDING"",IF(OR(B2&J2=""USAUSA"",B2&J2=""CANADACANADA""),TRUE,FALSE),FALSE)"
'~~> Remove existing filter
.AutoFilterMode = False
' Get last row
lastRow = .Range("J" & .Rows.Count).End(xlUp).Row
With .Range("A1:" & LastCol & lRow)
.AutoFilter Field:=lCol, Criteria1:="=TRUE"
'.Range("A1:Q1").AutoFilter Field:=14, Criteria1:="PENDING"
'.Range("A1:Q1").AutoFilter Field:=10, Criteria1:="USA", Operator:=xlOr, Criteria2:="CANADA"
'.Range("A1:Q1").AutoFilter Field:=2, Criteria1:="USA", Operator:=xlOr, Criteria2:="CANADA"
End With
.Range("K2:K" & lastRow).SpecialCells(xlCellTypeVisible).Copy _
Destination:=targetSheet.Range("G2")
.Range("C2:C" & lastRow).SpecialCells(xlCellTypeVisible).Copy _
Destination:=targetSheet.Range("A2")
.Range("E2:E" & lastRow).SpecialCells(xlCellTypeVisible).Copy _
Destination:=targetSheet.Range("B2")
.Range("G2:G" & lastRow).SpecialCells(xlCellTypeVisible).Copy _
Destination:=targetSheet.Range("C2")
.Range("I2:I" & lastRow).SpecialCells(xlCellTypeVisible).Copy _
Destination:=targetSheet.Range("F2")
.Columns(lCol).Delete
End With
'Rest of the Code
On Error Resume Next
sourceSheet.ShowAllData
On Error GoTo 0
End Sub