VBA - скопируйте и вставьте данные из 4-го столбца - PullRequest
0 голосов
/ 08 мая 2020

Я пытался использовать другой похожий код VBA, но не думаю, что понимаю, что я пытаюсь заменить для диапазона. В этом коде я пытаюсь скопировать данные из листа повторяющихся элементов в четвертый столбец со значением ячейки 12, а затем вставить их в последний рабочий лист.

' Repeating items worksheet
    Worksheets("Repeating Items").Select

    ActiveSheet.ShowAllData

    b = Worksheets("Repeating Items").Cells(Rows.Count, 1).End(xlUp).Row

    ' Filters the data where column 2 equals to 12 to x. ** this is where the error starts
    ActiveSheet.Range(Cells(1, 1), Cells(b, 4)).Autofilter Field:=4, Criteria1:="12", Operator:=xlFilterValues

    ' Selects only the filtered cells and copy
    Range(Cells(2, 1), Cells(b, 4)).SpecialCells(xlCellTypeVisible).Select
    Selection.Copy

    ThisWorkbook.Worksheets(ThisWorkbook.Sheets.Count).Select
    ActiveSheet.Paste Destination:=Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)

1 Ответ

0 голосов
/ 08 мая 2020

Согласно Документации Microsoft , вы можете просто применить фильтр к первой строке так же, как вы бы сделали это вручную в excel, и он автоматически отфильтрует ваш диапазон. Вам не нужно указывать свой числовой фильтр FYI (если только столбец не Текст ).

Кроме того, здесь нет необходимости Select. Это просто оператор среднего звена, который только замедляет ваш код. Вместо этого явно определите свои объекты (листы и диапазоны) и сразу переходите к операторам действия (копировать / вставить) .


Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Repeating Items")
Dim ls As Worksheet: Set ls = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Dim lr As Long

lr = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
ws.Range("A1:D1").AutoFilter Field:=4, Criteria1:=12

ws.Range("A2:D" & lr).SpecialCells(xlCellTypeVisible).Copy
ls.Range("A" & ls.Range("A" & ls.Rows.Count).End(xlUp).Row).PasteSpecial xlPasteValues

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...