2016-07-07 3 views
0

Я пытаюсь сделать резюме, скопировав информацию из разных листов в сводную таблицу. В частности, я пытаюсь скопировать ячейки O3 и O4 из листа3 в ячейку D3 и E3 в листе 1 соответственно. Затем я хочу перейти и скопировать ячейки O3 и O4 из листа 4 в ячейки D4 и E4 в листе 1, соответственно, и так далее через все мои листы.Макро копировать и вставлять с помощью цикла

Я совершенно не знаком с макрокодированием, поэтому буду очень благодарен за любую помощь, спасибо. Я предполагаю, что нужно использовать цикл.

P.S листы названы в честь компаний (например, «DataGroup», а не «Sheet3») повлияют на код?

+0

Что вы сделали до сих пор? Проверьте это, чтобы помочь вам запустить [link] (http://stackoverflow.com/questions/37107574/copy-and-paste-specific-cells-from-one-workheet-to-another) –

+0

Включите макросъемку, затем выполните описанные выше шаги. Это даст вам некоторый код для начала, затем прочитайте [как избежать '.Select'] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba -macros), чтобы затянуть его и научиться работать непосредственно с данными. – BruceWayne

+0

Не используйте для копирования и вставки в Excel, если вам не требуется копировать форматы. Просто используйте ячейки/диапазоны и их значения и установите их. – Mono

ответ

1

Если вы хотите прокручивать листы, вам не нужно ссылаться на них явно, то есть Sheets("DataGroup") вы можете использовать Sheets(1), что позволяет легко прокручивать их с каждым целым числом.

например.

Sub Copying() 
Dim i As Integer, j As Integer 
j = Sheets.Count 
For i = 2 To j 
    Sheets(1).Range("D" & i + 1) = Sheets(i).Range("O3").Value 
    Sheets(1).Range("E" & i + 1) = Sheets(i).Range("O4").Value 
Next i 
End Sub 
+0

Не используйте копию и вставку, а также выберите и активируйте функции, если это абсолютно необходимо. Копирование и вставка стирает ваш буфер обмена, и обычно это приводит к макросам «мерцания». Используйте .Values ​​диапазонов и назначьте их другим диапазонам. – Mono

+0

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

+0

Ответ на один вопрос, но хороший ответ лучше тогда ответ, который приводит к вредным привычкам имхо. – Mono

1

Если у вас есть рабочая книга, содержащая несколько рабочих листов и один из них называется Summary, то этот код будет скопировать значение ячейки A1 от каждого из других листов в колонке А Summary. Вы можете адаптировать его в соответствии с вашими потребностями.

Dim ws As Worksheet, rowDest As Integer 
rowDest = 1 
For Each ws In ThisWorkbook.Worksheets 
    If ws.Name <> "Summary" Then 
     Worksheets("Summary").Cells(rowDest, 1).Value = ws.Range("A1").Value 
     rowDest = rowDest + 1 
    End If 
Next ws 
Смежные вопросы