Vba excel копирование диапазона с листа на лист

Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в VBA Excel. Методы Cut, Copy и PasteSpecial объекта Range, метод Paste объекта Worksheet.

Метод Range.Cut

Range.Cut – это метод, который вырезает объект Range (диапазон ячеек) в буфер обмена или перемещает его в указанное место на рабочем листе.

Синтаксис

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен (перемещен) вырезанный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект вырезается в буфер обмена.

Для вставки на рабочий лист диапазона ячеек, вырезанного в буфер обмена методом Range.Cut, следует использовать метод Worksheet.Paste.

Метод Range.Copy

Range.Copy – это метод, который копирует объект Range (диапазон ячеек) в буфер обмена или в указанное место на рабочем листе.

Синтаксис

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен скопированный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект копируется в буфер обмена.

Метод Worksheet.Paste

Worksheet.Paste – это метод, который вставляет содержимое буфера обмена на рабочий лист.

Синтаксис

Worksheet.Paste (Destination, Link)

Метод Worksheet.Paste работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект.
Link Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию).

В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.

Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, форматы, примечания и т.д.), а также для проведения транспонирования и вычислений, используйте метод Range.PasteSpecial (специальная вставка).

Примеры

Вырезание и вставка диапазона одной строкой (перемещение):

Range(«A1:C3»).Cut Range(«E1»)

Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

Range(«A1:C3»).Cut

ActiveSheet.Paste Range(«E1»)

Копирование и вставка диапазона одной строкой:

Range(«A18:C20»).Copy Range(«E18»)

Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

Range(«A18:C20»).Copy

ActiveSheet.Paste Range(«E18»)

Копирование одной ячейки и вставка ее данных во все ячейки заданного диапазона:

Range(«A1»).Copy Range(«B1:D10»)


 

VistaSV30

Пользователь

Сообщений: 70
Регистрация: 21.11.2014

#1

08.10.2015 09:08:51

Добрый день!
Нужно скопировать данные с листа А на лист Б, при этом  не переходя на лист Б
Одну ячейку скопировать получилось. А вот диапазон пока не могу.

Код
Sub Кн_Архив()
Dim Ar As Range

 Set Ar = Worksheets("Б").Range("A1")
  
   Range("А1").Select 
   Selection.Copy
   Range(Ar.Cells(1, 1)).Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 

End Sub

Спасибо!

Изменено: VistaSV3008.10.2015 09:10:21

<#0>

 

yoozhik

Пользователь

Сообщений: 239
Регистрация: 01.01.1970

#2

08.10.2015 09:28:52

Код
Sub Кн_Архив()
Dim Ar As Range
 Set Ar = Worksheets("Б").Range("A1")
[A1:B6].Copy Destination:=Ar
End Sub
 

VistaSV30

Пользователь

Сообщений: 70
Регистрация: 21.11.2014

Спасибо, скопировать получилось!
Подскажите еще как скопировать только значения, а не формулы

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#4

08.10.2015 09:43:01

Ну из двух сделайте один макрос. И зачем эти навороты с Set Ar…?

Код
Sub Кн_Архив()
    [A1:B6].Copy
    Worksheets("Б").Range("A1").PasteSpecial Paste:=xlPasteValues
End Sub
'или вариант с CodeName
Sub Кн_Архив()
    [A1:B6].Copy
    Лист2.[A1].PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub

Изменено: Sanja08.10.2015 09:47:00

Согласие есть продукт при полном непротивлении сторон.

 

VistaSV30

Пользователь

Сообщений: 70
Регистрация: 21.11.2014

Спасибо, Sanja. Сделал как Вы посоветовали

 

Hugo

Пользователь

Сообщений: 23251
Регистрация: 22.12.2012

#6

08.10.2015 10:12:52

Ещё вариант в одну строку (можно написать ещё чуть короче)

Код
Sub tt(): Sheets("Į").[a1:b6].Value = [a1:b6].Value: End Sub

Есть книга, в которой 10 листов. Нужно скопировать содержимое 8-го листа в 3-й лист.

Я пытался сделать это следующим способом:

Set CurrentWorkbook = ThisWorkbook
Set sheetTemp = CurrentWorkbook.Worksheets(8)

With Application: .ScreenUpdating = False: .DisplayAlerts = False: End With
With CurrentWorkbook
     sheetTemp.Copy CurrentWorkbook.Worksheets(3)
End With
With Application: .ScreenUpdating = True: .DisplayAlerts = True: End With

Все работает, но вместо записи в 3-й лист оно создает перед третьим листом новый лист. Как сделать так, чтобы при копировании не создавался новый лист и записывалось в существующий лист?

vikttur_Stop_RU_war_in_UA's user avatar

задан 21 сен 2018 в 10:35

Leksor's user avatar

2

Полное копирование столбцов (ширина, форматирование, значения, примечания…):

Sub CopyRange()
    Worksheets("Лист1").Columns("C:E").Copy
    Worksheets("Лист2").Columns("C:E").PasteSpecial
End Sub

или

Sub CopyRange()
    Worksheets("Лист1").Columns("C:E").Copy Worksheets("Лист2").Columns("C:E")
End Sub

Для копирования только нужного:

  Worksheets("Лист1").Range("C3:E50").Copy

  With Worksheets("Лист2").Range("C3")
      .PasteSpecial xlPasteColumnWidths ' ширина столбца'
      .PasteSpecial xlPasteValues' значения'
      .PasteSpecial xlPasteFormats' форматы'
      .PasteSpecial xlPasteFormulasAndNumberFormats ' формулы'
      ' .....'
  End With

После копирования очистить буфер:

Application.CutCopyMode = False

ответ дан 21 сен 2018 в 11:38

vikttur_Stop_RU_war_in_UA's user avatar

Home / VBA / VBA Copy Range to Another Sheet + Workbook

To copy a cell or a range of cells to another worksheet you need to use the VBA’s “Copy” method. In this method, you need to define the range or the cell using the range object that you wish to copy and then define another worksheet along with the range where you want to paste it.

Copy a Cell or Range to Another Worksheet

Range("A1").Copy Worksheets("Sheet2").Range("A1")
  1. First, define the range or the cell that you want to copy.
    1-define-the-range-or-cell
  2. Next, type a dot (.) and select the copy method from the list of properties and methods.
    2-type-a-dot-and-select-the-copy-method
  3. Here you’ll get an intellisense to define the destination of the cell copied.
    3-define-the-destination-of-the-copied-cell
  4. From here, you need to define the worksheet and then the destination range.
    4-define-the-worksheet-and-than-destination-range

Now when you run this code, it will copy cell A1 from the active sheet to the “Sheet2”. There’s one thing that you need to take care that when you copy a cell and paste it to a destination it also pastes the formatting there.

But if you simply want to copy the value from a cell and paste it into the different worksheets, consider the following code.

Worksheets("Sheet2").Range("A1") = Range("A1").Value

This method doesn’t use the copy method but simply adds value to the destination worksheet using an equal sign and using the value property with the source cell.

Copy Cell from a Different Worksheet

Now let’s say you want to copy a cell from a worksheet that is not active at the time. In this case, you need to define the worksheet with the source cell. Just like the following code.

Worksheets("sheet1").Range("A1").Copy Worksheets("Sheet2").Range("A1")

Copy a Range of Cells

Range("A1:A10").Copy Worksheets("Sheet2").Range("A1:A10")
Range("A1:A10").Copy Worksheets("Sheet2").Range("A1")

Copy a Cell to a Worksheet in Another Workbook

When workbooks are open but not saved yet.

Workbooks("Book1").Worksheets("Sheet1").Range("A1").Copy _
Workbooks("Book2").Worksheets("Sheet1").Range("A1")

When workbooks are open and saved.

Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy _
Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1")

Copy a Cell to a Worksheet in Another Workbook which is Closed

'to open the workbook that is saved in a folder on your system _
change the path according to the location you have in your _
system
Workbooks.Open "C:UsersDellDesktopmyFile.xlsx"

'copies cell from the book1 workbook and copy and paste _
it to the workbook myFile
Workbooks("Book1").Worksheets("Sheet1").Range("A1").Copy _
Workbooks("myFile").Worksheets("Sheet1").Range("A1")

'close the workbook and after saving
Workbooks("myFile").Close SaveChanges:=True

Related: How to Open a Workbook using VBA in Excel

More Tutorials

    • Count Rows using VBA in Excel
    • Excel VBA Font (Color, Size, Type, and Bold)
    • Excel VBA Hide and Unhide a Column or a Row
    • Excel VBA Range – Working with Range and Cells in VBA
    • Apply Borders on a Cell using VBA in Excel
    • Find Last Row, Column, and Cell using VBA in Excel
    • Insert a Row using VBA in Excel
    • Merge Cells in Excel using a VBA Code
    • Select a Range/Cell using VBA in Excel
    • SELECT ALL the Cells in a Worksheet using a VBA Code
    • ActiveCell in VBA in Excel
    • Special Cells Method in VBA in Excel
    • UsedRange Property in VBA in Excel
    • VBA AutoFit (Rows, Column, or the Entire Worksheet)
    • VBA ClearContents (from a Cell, Range, or Entire Worksheet)
    • VBA Enter Value in a Cell (Set, Get and Change)
    • VBA Insert Column (Single and Multiple)
    • VBA Named Range | (Static + from Selection + Dynamic)
    • VBA Range Offset
    • VBA Sort Range | (Descending, Multiple Columns, Sort Orientation
    • VBA Wrap Text (Cell, Range, and Entire Worksheet)
    • VBA Check IF a Cell is Empty + Multiple Cells

    ⇠ Back to What is VBA in Excel

    Helpful Links – Developer Tab – Visual Basic Editor – Run a Macro – Personal Macro Workbook – Excel Macro Recorder – VBA Interview Questions – VBA Codes

    I am trying to copy a range from one worksheet to another. I have multiple ranges that I would like to copy and paste at various points in the new worksheet though (for example, I want to paste the first range to D3, then the next range to E12, and so on), so I am using the cells property to describe the range. However, for some reason, when I describe the range that I want to paste at in the new worksheet using the cells format rather than just putting in a string, it does not work.

    This line of code does work:

    Sheets("Sheet1").Range(Cells(2, 3), Cells(10, 3)).Copy _
      Destination:=Sheets("Sheet2").Range("D3")
    

    but this one does not:

    Sheets("Sheet1").Range(Cells(2, 3), Cells(10, 3)).Copy _
      Destination:=Sheets("Sheet2").Range(Cells(3,4))
    

    When I run the latter line of code, I get a «Run-time error 1004: application-defined or object defined error». Why is this and how can I fix it?

    Like this post? Please share to your friends:
  • Vba excel копирование данных с листа на лист
  • Vba excel копирование данных по условию
  • Vba excel копирование всей строки
  • Vba excel копирование в буфер обмена
  • Vba excel координаты мыши