2014-11-13 3 views
0

У меня есть код, который отлично работает. Он анализирует все мои листы и находит строку в столбце A, которую я хочу, и вставляет ее в указанный лист. Однако мне нужно скопировать указанную строку плюс следующее количество строк X. Может ли кто-нибудь помочь мне в этом?Копирование строки плюс следующие 3

Sub FindValues() 
    Dim ws As Excel.Worksheet 
    Dim LastRow As Long 
    Dim i As Integer 

    For Each ws In Application.ThisWorkbook.Worksheets 
     LastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row 
     i = 1 

     Do While i <= LastRow 
      If ws.Range("A" & i).Value = "OwnershipType Ownership Type" Then 
       ws.Rows(i).Copy Sheets("Summary").Range("A2") 
       i = i - 1 
       LastRow = LastRow - 1 
      End If 
      i = i + 1 
     Loop 
    Next 


End Sub 
+0

Воспроизвести с помощью 'ws.Rows (i) .Copy' - изменить это как' ws.Rows (i & ":" & i + 3) .Copy'. BTW: удалить 'i = i -1' и' lastrow = lastrow - 1' эти 2 не имеют смысла. Просто оставьте последний 'i = i + 1'. –

ответ

1

Вы можете изменить диапазон строк копируется на эту строку следующим образом:

ws.Rows(i & ":" & i + 3).Copy Sheets("Summary").Range("A2") 

Если матч был найден в строке 1, например, код будет отображаться как ws.Rows(1:4).Copy

+0

Отлично! Я подумал, что это достаточно легко, но я не мог заставить его работать. Я продолжал пытаться установить диапазон. Благодаря! – user3150260

+1

Не беспокойтесь, пожалуйста, примите, если вы сочтете это полезным! – Gareth

0

Я внес некоторые незначительные изменения. Просто добавлено (i + количество строк для копирования). Проверьте приведенный ниже код: В коде Integer copyrw вы можете установить это целое число, чтобы скопировать количество строк.

Sub FindValues() 
    Dim ws As Excel.Worksheet 
    Dim LastRow As Long 
    Dim i As Integer 
    Dim copyrw as Integer 

copyrw = 3 
For Each ws In Application.ThisWorkbook.Worksheets 
    LastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row 
    i = 1 

    Do While i <= LastRow 
     If ws.Range("A" & i).Value = "OwnershipType Ownership Type" Then 
      ws.Rows(i & ":" & i + copyrw).Copy Sheets("Summary").Range("A2") 
      i = i - 1 
      LastRow = LastRow - 1 
     End If 
     i = i + 1 
    Loop 
Next 


End Sub 
+0

Какой смысл 'i = i - 1' и' lastRow = lastRow - 1', а затем увеличить 'i' за« End If »? –

+0

Хмммм ... Это немного странный кодекс кодирования. –

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