2013-06-28 3 views
0

Попытка написать макрос в VBA для Excel, чтобы посмотреть на значение в определенном столбце из каждой строки данных в списке, и если это значение «да», то это копирует и вставляет всю строку на другой лист в той же книге. Назовем два листа «Данные» и «Финал». Я хочу иметь ссылки на листы, поэтому не имеет значения, какой лист я открываю, когда он запускает код. Я собирался использовать цикл Do для циклического перехода по строкам в одной информационной таблице, пока не найдет, что больше нет записей, и если инструкции для проверки значений.Скопируйте и вставьте между листами в книге с кодом VBA

Я смущен о том, как переключиться с одного листа на другой.

Как я могу конкретно ссылаться на ячейки в разных листах?

Вот псевдокод я имел в виду:

Do while DataCells(x,1).Value <> " " 
    for each DataCells(x,1).Value="NO" 
     if DataCells(x,2).Value > DataCells(x,3).Value or _ 
     DataCells(x,4).Value < DataCells(x,5).Value 
      'Copy and paste/insert row x from Data to Final sheet adding a new 
      'row for each qualifying row 
     else 
      x=x+1 
     end 
    else if DataCells(x,1).Value="YES" 
Loop 
'copy and paste entire row to a third sheet 
'continue this cycle until all rows in the data sheet are examined 
+0

необходимо отформатировать код более четко; поскольку он стоит прямо сейчас, код нечитабелен из-за отсутствия линий или отступов. – LittleBobbyTables

+0

Используйте функцию поиска. – user2140261

ответ

0
Sub FilterAndCopy() 

Application.ScreenUpdating = False 
Application.EnableEvents = False 
Application.Calculation = xlCalculationManual 

Dim sh As Worksheet, sh2 As Worksheet 
Dim lastrow1 As Long 
Dim lastcolumn1 As Long 



Set sh = ThisWorkbook.Sheets("Data") 
Set sh2 = ThisWorkbook.Sheets("Final") 

lastrow1 = sh.Cells(Rows.Count, "A").End(xlUp).Row ' Replace "A" With column that has the most Rows 
lastcolumn1 = sh.Cells(1, Columns.Count).End(xlToLeft).Column 

With sh.Range(.Cells(1, 1), .Cells(lastrow1, lastcolumn1)) 

'Replace the number in the field section with your Columns number 
    .AutoFilter , _ 
     Field:=1, _ 
     Criteria1:="yes" 

    .Copy sh2.Range("A1") 

End With 

Application.ScreenUpdating = True 
Application.EnableEvents = True 
Application.Calculation = xlCalculationAutomatic 

End Sub