2014-01-29 8 views
0

Я пытаюсь создать код, который просматривает диапазон ячеек, и скопирует и вставляет ячейки, которые соответствуют определенному параметру, в другое место в книге.Копирование и вставка Loop в VBA на основе значений ячеек

Я хотел бы, чтобы скопировать что-нибудь с буквой L от «Sheet5» и скопировать определенный диапазон для «sheet1»

я должен иметь что-то неправильно с частью петли кода, потому что только в верхней части ячейки диапазон копируется. Я хотел бы, чтобы вставка начала в строке 5 и продолжала двигаться вниз. Означает ли это, что я правильно поставил IRow = IRow + 1 ниже функции вставки?

Sub Paste_Value_Test() 

Dim c As Range 
Dim IRow As Long 
Dim rDestination As Excel.Range 

Application.ScreenUpdating = False 
Sheets("sheet5").Activate 
For Each c In Sheets("sheet5").Range("b2", Range("N65536").End(xlUp)) 
    If c.Value = "L" Then 
     Sheets("sheet5").Cells(c.Row, 2).Copy 

     Set rDestination = Worksheets("sheet5").Cells(5 + IRow, 12) 

     rDestination.Select 
     Selection.PasteSpecial Paste:=xlPasteValues, _ 
     Operation:=xlNone, _ 
     SkipBlanks:=False, _ 
     Transpose:=False 

     IRow = IRow + 1 

    End If 
Next c 

End Sub 

Я очень ценю любую помощь по этому вопросу. Я относительно новичок в VBA и собираюсь начать серьезно копаться.

+0

Таким образом, «L» может быть где угодно в столбцах «B: N'? И когда вы нашли, вы хотите скопировать значение из Col 2 этой строки? –

+0

Вы копируете файл Sheet5 в Sheet5 в свой код? –

ответ

2

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

Sub Paste_Value_Test() 
    Dim c As Range 
    Dim IRow As Long, lastrow As Long 
    Dim rSource As Range 
    Dim wsI As Worksheet, wsO As Worksheet 

    On Error GoTo Whoa 

    '~~> Sheet Where "L" needs to be checked 
    Set wsI = ThisWorkbook.Sheets("Sheet5") 
    '~~> Output sheet 
    Set wsO = ThisWorkbook.Sheets("Sheet1") 

    Application.ScreenUpdating = False 

    With wsI 
     '~~> Find Last Row which has data in Col B to N 
     If Application.WorksheetFunction.CountA(.Cells) <> 0 Then 
      lastrow = .Columns("B:N").Find(What:="*", _ 
          After:=.Range("B1"), _ 
          Lookat:=xlPart, _ 
          LookIn:=xlFormulas, _ 
          SearchOrder:=xlByRows, _ 
          SearchDirection:=xlPrevious, _ 
          MatchCase:=False).Row 
     Else 
      lastrow = 1 
     End If 

     '~~> Set you input range 
     Set rSource = .Range("B2:N" & lastrow) 

     '~~> Search for the cell which has "L" and then copy it across to sheet1 
     For Each c In rSource 
      If c.Value = "L" Then 
       .Cells(c.Row, 2).Copy 
       wsO.Cells(5 + IRow, 12).PasteSpecial Paste:=xlPasteValues 

       IRow = IRow + 1 
      End If 
     Next 
    End With 

LetsContinue: 
    Application.ScreenUpdating = True 
    Application.CutCopyMode = False 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
    Resume LetsContinue 
End Sub 
+0

Я очень ценю помощь в этом. Это отлично сработало для того, что я хотел сделать. Мое объяснение было сбивающим с толку, потому что я схватил код из другого сообщения, которое я недостаточно редактировал для своего сценария. Я планирую пройти полный учебник VBA, но если у вас есть источники, которые полезны для изучения манипуляций с данными в VBA, это было бы очень полезно. – dutchballa

+0

Рад, что это помогло :) Какие манипуляции с данными? В Stackoverflow есть множество примеров манипулирования данными. Тогда есть Google, который может оказать большую помощь, если вы знаете, как искать :) –

+0

Получил его. Я думаю, что это лучший выбор. План состоит в том, чтобы пройти учебник, чтобы убедиться, что я могу отлаживать и иметь общее представление о VBA. Затем вы будете изучать вещи на основе проекта. Это отличный форум. Спасибо за тонну за помощь. – dutchballa

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