2015-11-04 8 views
1

Я хочу скопировать ряд ячеек на другой рабочий лист на основе критерия, указанного в столбце N. Поэтому для каждой строки он должен проверить, соответствует ли он критерию в столбце N Если значение в столбце N = 1, оно должно скопировать из этой строки Range(Cells(j, 1), Cells(j, 8)) на другой рабочий лист, начиная с строки 10. Если значение в столбце N = 0, оно пропускает эту строку и проверяет следующую. Поэтому он не копирует эту строку.Копирование диапазона от одного листа к другому на основе критерия

Может быть, мой неверный код может объяснить это лучше, чем мне:

Sub TCoutput() 
    Dim i As New Worksheet 
    Dim e As New Worksheet 

    Set i = ActiveWorkbook.Worksheet.Item(3) 
    Set e = ActiveWorkbook.Worksheets.Item(4) 
    Dim d 
    Dim j 

    d = 10 
    j = 3 

    Do Until IsEmpty(i.Range("N" & j)) 

     If i.Range("N" & j) = "1" Then 
     d = d + 1 
      e.Range(Cells(d, 1), Cells(d, 8)) = i.Range(Cells(j, 1), Cells(j,8)) 
     End If 
     j = j + 1 
    Loop 
End Sub 
+0

Что вы пытаетесь сделать с помощью 'Set i = ActiveWorkbook.Worksheet.Item (3)'? – Jeeped

+0

Я действительно не знаю, я видел это где-то, чтобы активировать рабочий лист, над которым вы работаете? Потому что я работаю с несколькими рабочими листами. – Jeroen

ответ

0

попробуйте это. Ive add .value и d = d + 1

Sub TCoutput() 
     Dim i As New Worksheet 
     Dim e As New Worksheet 

     Set i = ActiveWorkbook.Worksheets.Item(1) 
     Set e = ActiveWorkbook.Worksheets.Item(2) 
     Dim d 
     Dim j 

     d = 10 
     j = 3 

     Do Until IsEmpty(i.Range("N" & j)) 

      If i.Range("N" & j) = "1" Then 
       e.Range(e.Cells(d, 1), e.Cells(d, 8)).Value = i.Range(i.Cells(j, 1), i.Cells(j, 8)).Value 
       d = d + 1 
      End If 
      j = j + 1 
     Loop 
    End Sub 
+0

Да, теперь он отлично работает! Огромное спасибо. Наконец, я могу продолжить! – Jeroen

1

При использовании нескольких таблиц, вы должны быть осторожны и убедитесь, что все .Range и .Cells ссылки включают лист, который вы хотите. Первые вещи первых, заменить If заявление с этим:

If i.Range("N" & j) = "1" Then 
    e.Range(e.Cells(d, 1), e.Cells(d, 8)) = i.Range(i.Cells(j, 1), i.Cells(j,8)) 
End If 

Или, вы можете использовать With (который я лично предпочитаю):

With i 
If .Range("N" & j) = "1" Then 
    e.Range(e.Cells(d,1),e.Cells(d,8)) = .Range(.Cells(j,1),.Cells(j,8)) 
End If 
End with 

Без явной ссылки на листе, то Cells() и Range() отложит до того, что будет ActiveSheet.

+0

Спасибо за вашу реакцию. Тем не менее, он не работает. Теперь я не получаю никаких ошибок, но он все равно не копирует диапазон. И я забыл добавить d = d + 1 – Jeroen

+0

Я нашел что-то, что сработало, но всякий раз, когда я запускаю макрос, excelfile проходил красиво, потому что он непрерывно выбирает 2 листа. Я также добавил код выше. Поэтому я предпочитаю делать это с помощью anwer – Jeroen

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