2016-06-22 11 views
0

Я ищу код для копирования строк из нескольких листов в один комбинированный лист на основе клеточного клапана.Код Excel VBA для копирования строк из нескольких листов в один лист на основе значения ячейки

Подробности: У меня есть несколько номеров проектов, которые являются вкладками (2016-010-082, 2016-010-086, 2016-060-015 ... и т. Д.). В столбце E на каждом из этих листов у меня есть раскрывающийся список, в котором вы можете выбрать «да» или «нет» на основании того, завершена ли эта задача или нет. Я бы хотел, чтобы все задачи, которые «нет», будут скопированы в один лист, чтобы я мог видеть все задачи для всех проектов, которые еще не были выполнены.

Когда «нет» изменено на «да» на вкладке конкретного проекта, я бы хотел, чтобы строка также удалялась из скомпилированного листа.

Я бы также хотел, чтобы ячейки D2 и D3 отображались в строках A и B скомпилированного листа, так как это стандартная информация для каждой вкладки, которую мне нужно будет видеть на скомпилированном листе, чтобы я знал, какой номер проекта это is и название проекта.

Образец изображения прилагается.

спасибо!

Sample Image

Это то, что я думал, что будет работать на одном листе ... как только я получил эту простую один работает должным образом, я полагал, что я мог бы отформатировать его для нескольких листов ...

Sub Test() 
    For Each Cell In Sheets(1).Range("E:E") 
     If Cell.Value = "NO" Then 
      matchRow = Cell.Row 
      Rows(matchRow & ":" & matchRow).Select 
      Selection.Copy 
      Sheets("Sheet2").Select 
      ActiveSheet.Rows(matchRow).Select 
      ActiveSheet.Paste 
      Sheets("Sheet1").Select 
     End If 
    Next 
End Sub 
+1

Привет, вы можете показать, какую работу вы сделали до сих пор, чтобы достичь этого? Это сайт поддержки, а не сайт разработки. –

+0

это то, что, как я думал, будет работать на одном листе ... как только я получил эту работу простой, работая должным образом, я решил, что могу отформатировать ее для нескольких листов ... Sub Test() Для каждой ячейки в листе (1) .Range ("Е: Е") Если Cell.Value = "нет", то matchRow = Cell.Row Ряды (matchRow & ":" & matchRow). .Select Selection.Copy Листы ("Лист2") Выбрать ActiveSheet.Rows (matchRow) .Select ActiveSheet.Paste Sheets ("Лист1"). Выберите End If Next End Sub – user6499985

ответ

0

Для первая часть, где вы хотите получить список только тех объектов, с «Нет», вы можете использовать эту формулу массива (ввод с CTRL + SHIFT + ENTER):

=INDEX(B$2:B$4,SMALL(IF($D$2:$D$4="Yes",ROW(B$2:B$4)-ROW(B$2)+1),ROWS(B$2:B2)))

Предполагая, что ваши данные изложены следующим образом: enter image description here

Затем обернуть вокруг IfError([formula],""), что скрыть #NUM ошибки. Когда вы измените «Нет» в «Завершено» на «Да», список справа будет обновляться.

Смежные вопросы