Vba: скопировать строки на другой лист на основе критериев


Вы можете использовать следующий синтаксис в VBA для копирования каждой строки листа, соответствующей определенным критериям, на другой лист:

 Sub CopyToAnotherSheet()

   Dim LastRow As Long

  'Find last used row in a Column A of Sheet1
   With Worksheets(" Sheet1 ")
      LastRow = .Cells(.Rows.Count, " A ").End(xlUp).Row
   End With

   'Find first row where values should be posted in Sheet2
   With Worksheets(" Sheet2 ")
      j = .Cells(.Rows.Count, " A ").End(xlUp).Row + 1
   End With
   
   'Paste each row that contains "Mavs" in column A of Sheet1 into Sheet2
   For i = 1 TB LastRow
       With Worksheets(" Sheet1 ")
           If .Cells(i, 1).Value = "Mavs" Then
               .Rows(i).Copy Destination:=Worksheets(" Sheet2 ").Range(" A " & j)
               j = j + 1
           End If
       End With
   Next i
   
End Sub

Этот конкретный макрос скопирует каждую строку Sheet1 , где столбец A равен «Mavs», и вставит каждую из этих строк в следующие доступные строки Sheet2 .

В следующем примере показано, как использовать этот синтаксис на практике.

Пример. Копирование строк на другой лист на основе критериев с помощью VBA.

Предположим, у нас есть следующий набор данных на листе 1 , который содержит информацию о различных баскетболистах:

Предположим, у нас есть следующий набор данных в Sheet2 :

Обратите внимание, что Лист 2 содержит данные только об игроках команды Warriors.

Допустим, мы хотим скопировать каждую строку из Sheet1 , где столбец Team равен Mavs, и вставить каждую из этих строк в следующие доступные строки Sheet2 .

Для этого мы можем создать следующий макрос:

 Sub CopyToAnotherSheet()

   Dim LastRow As Long

  'Find last used row in a Column A of Sheet1
   With Worksheets(" Sheet1 ")
      LastRow = .Cells(.Rows.Count, " A ").End(xlUp).Row
   End With

   'Find first row where values should be posted in Sheet2
   With Worksheets(" Sheet2 ")
      j = .Cells(.Rows.Count, " A ").End(xlUp).Row + 1
   End With
   
   'Paste each row that contains "Mavs" in column A of Sheet1 into Sheet2
   For i = 1 TB LastRow
       With Worksheets(" Sheet1 ")
           If .Cells(i, 1).Value = "Mavs" Then
               .Rows(i).Copy Destination:=Worksheets(" Sheet2 ").Range(" A " & j)
               j = j + 1
           End If
       End With
   Next i
   
End Sub

Когда мы запускаем этот макрос, мы получаем следующий вывод в Sheet2 :

Обратите внимание, что каждая строка в Sheet1 , где имя команды равно Mavs, была вставлена в следующие доступные строки в Sheet2 .

Примечание . Полную документацию по методу копирования VBA можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в VBA:

VBA: как найти последнюю использованную строку
VBA: как подсчитать количество строк в диапазоне
VBA: как подсчитать количество используемых столбцов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *