Копировать столбец excel vba

Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в 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»)


In this Article

  • Rows & Columns – Paste vs. Insert
    • Copy & Paste Over Existing Row / Column
    • Copy & Insert Row / Column
  • Copy Entire Row
    • Cut and Paste Rows
    • Copy Multiple Rows
  • Copy Entire Column
    • Cut and Paste Columns
    • Copy Multiple Columns
  • Copy Rows or Columns to Another Sheet
    • Cut Rows or Columns to Another Sheet

This tutorial will teach you how to copy (or cut) entire Rows or Columns using VBA. We cover copying and pasting ranges of cells in another article.

First we will show you how to paste or insert copied rows/columns and discuss the differences.  Then we will show you all of the different ways to references rows and columns when copying or cutting.

Rows & Columns – Paste vs. Insert

When pasting rows and columns you have two options:  You can paste over the existing row (or column) or you can insert a new row (or column).

Let’s look at the difference…

vba copy and paste row

Copy & Paste Over Existing Row / Column

This will copy row 1 and paste it into the existing row 5:

Range("1:1").Copy Range("5:5")

This will copy column C and paste it into column E:

Range("C:C").Copy Range("E:E")

Copy & Insert Row / Column

Instead you can insert the copied row or column and shift the existing rows or columns to make room.

This will copy row 1 and insert it into row 5, shifting the existing rows down:

Range("1:1").Copy
Range("5:5").Insert

This will copy column C and insert it into column E, shifting the existing columns to the right:

Range("C:C").Copy
Range("E:E").Insert

Copy Entire Row

Below we will show you several ways to copy row 1 and paste into row 5.

Range("1:1").Copy Range("5:5")
Range("A1").EntireRow.Copy Range("A5")
Rows(1).Copy Rows(5)

Cut and Paste Rows

Simply use Cut instead of Copy to cut and paste rows:

Rows(1).Cut Rows(5)

Copy Multiple Rows

Here are examples of copying multiple rows at once:

Range("5:7").Copy Range("10:13")
Range("A5:A7").EntireRow.Copy Range("A10:A13")
Rows("5:7").Copy Rows("10:13")

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

Copy Entire Column

You can copy entire columns similarily to copying entire rows:

Range("C:C").Copy Range("E:E")
Range("C1").EntireColumn.Copy Range("C1").EntireColumn
Columns(3).Copy Range(5)

Cut and Paste Columns

Simply use Cut instead of Copy to cut and paste columns:

Range("C:C").Cut Range("E:E")

Copy Multiple Columns

Here are examples of copying multiple columns at once:

Range("C:E").Copy Range("G:I")
Range("C1:E1").EntireColumn.Copy Range("G1:I1")
Columns("3:5").Copy Columns("7:9")

VBA Programming | Code Generator does work for you!

Copy Rows or Columns to Another Sheet

To copy to another sheet, simply use the Sheet Object:

Sheets("sheet1").Range("C:E").Copy Sheets("sheet2").Range("G:I")

Cut Rows or Columns to Another Sheet

You can use the exact same technique to cut and paste rows or columns to another sheet.

Sheets("sheet1").Range("C:E").Cut Sheets("sheet2").Range("G:I")

I’m trying to write a macro that copies the content of column 1 from sheet 1 to column 2 on sheet 2. This is how the module looks like but, when I run it, I get

Run time error 9, Subscript out of range.

Sub OneCell()
    Sheets("Sheet1").Select
    'select column 1 A1'
    Range("A1:A3").Select

    Selection.Copy
    Range("B1:B3").Select

    ActiveSheet.Paste

    Sheets("Sheet2").Select
    Application.CutCopyMode = False
End Sub

ZygD's user avatar

ZygD

21k39 gold badges77 silver badges98 bronze badges

asked Jan 2, 2010 at 4:38

excel34's user avatar

The following works fine for me in Excel 2007.
It is simple, and performs a full copy (retains all formatting, etc.):

Sheets("Sheet1").Columns(1).Copy Destination:=Sheets("Sheet2").Columns(2)

«Columns» returns a Range object, and so this is utilizing the «Range.Copy» method. «Destination» is an option to this method — if not provided the default is to copy to the paste buffer. But when provided, it is an easy way to copy.

As when manually copying items in Excel, the size and geometry of the destination must support the range being copied.

answered Dec 18, 2012 at 1:19

David's user avatar

DavidDavid

5455 silver badges13 bronze badges

Selecting is often unnecessary. Try this

Sub OneCell()
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub

answered Jan 2, 2010 at 21:12

guitarthrower's user avatar

guitarthrowerguitarthrower

5,6043 gold badges28 silver badges37 bronze badges

4

If you have merged cells,

Sub OneCell()
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub

that doesn’t copy cells as they are, where previous code does copy exactly as they look like (merged).

Basic's user avatar

Basic

26.1k24 gold badges112 silver badges197 bronze badges

answered Feb 9, 2012 at 14:38

Lucy's user avatar

LucyLucy

212 bronze badges

I’m not sure why you’d be getting subscript out of range unless your sheets weren’t actually called Sheet1 or Sheet2. When I rename my Sheet2 to Sheet_2, I get that same problem.

In addition, some of your code seems the wrong way about (you paste before selecting the second sheet). This code works fine for me.

Sub OneCell()
    Sheets("Sheet1").Select
    Range("A1:A3").Copy
    Sheets("Sheet2").Select
    Range("b1:b3").Select
    ActiveSheet.Paste
End Sub

If you don’t want to know about what the sheets are called, you can use integer indexes as follows:

Sub OneCell()
    Sheets(1).Select
    Range("A1:A3").Copy
    Sheets(2).Select
    Range("b1:b3").Select
    ActiveSheet.Paste
End Sub

answered Jan 2, 2010 at 4:46

paxdiablo's user avatar

paxdiablopaxdiablo

844k233 gold badges1565 silver badges1937 bronze badges

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rng As Range, r As Range
  Set rng = Intersect(Target, Range("a2:a" & Rows.Count))
  If rng Is Nothing Then Exit Sub
    For Each r In rng
      If Not IsEmpty(r.Value) Then
        r.Copy Destination:=Sheets("sheet2").Range("a2")
      End If
    Next
  Set rng = Nothing
End Sub

Juan Mellado's user avatar

Juan Mellado

15k5 gold badges47 silver badges54 bronze badges

answered Mar 17, 2012 at 16:58

Ravi's user avatar

1

 

Louie77

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

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

#1

12.12.2016 12:23:51

Добрый день!
Помогите пожалуйста доделать макрос. Общая идея такая: из книги «копирование столбцов.xlsx» запускается макрос, который вызывает окно выбора файла. Это может быть любой файл, и фиксированного имени у него нет. Поэтому я и открываю его вручную. Здесь в примере это «Книга2копирование.xlsx». Потом я из первой книги копирую во вторую книгу(открытую диалоговым окном) нужные мне столбцы. Копирую только как значения. Проблема в том, что я писала макрос макрорекодером и не могу правильно сделать передачу имени открытого из диалогового окна файла. У меня это строка

‘активируем книгу куда копируем
Windows(«Книга2копирование.xlsx»).Activate  
Она получается завязанной именно на имя моего примера, а должна получать имя файла, открытого из диалогового окна. Помогите пожалуйста разобраться!

Код
Sub Макрос1()
' Макрос1 Макрос
' открываем книгу куда будем копировать
        fileopenname = Application.GetOpenFilename(fileFilter:="Книги Excel (*.xls*), *.xls*", Title:="Введите путь к файлу данных")
        Workbooks.OpenText Filename:=fileopenname, Origin:=866 _
        , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
        , Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
        TrailingMinusNumbers:=True
        Application.ScreenUpdating = False
      ' активируем книгу откуда копируем
    Windows("копирование столбцов.xlsx").Activate
    'выделяем нужный столбец
    Columns("A:A").Select
    Selection.Copy
    'активируем книгу куда копируем
       Windows("Книга2копирование.xlsx").Activate
        Columns("A:A").Select
    ' вставляем только значения
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
     End Sub
 

Sanja

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

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

#2

12.12.2016 12:31:40

Код
Sub Макрос1()
fileopenname = Application.GetOpenFilename(fileFilter:="Книги Excel (*.xls*), *.xls*", Title:="Введите путь к файлу данных")
Workbooks.OpenText Filename:=fileopenname, Origin:=866 _
        , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
        , Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
        TrailingMinusNumbers:=True
        Application.ScreenUpdating = False
Workbooks("копирование столбцов.xlsx").Worksheets("Имя_листа_ОТКУДА_копируем").Columns("A:A").Copy
Workbooks(fileopenname).Worksheets("Имя_листа_КУДА_копируем").Columns("A:A").PasteSpecial Paste:=xlPasteValues
End Sub

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

 

Louie77

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

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

Спасибо большое за помощь. Только я хочу спросить — если мне заранее неизвестно имя листа куда копируем, тогда как быть? Я могу узнать имя этого листа только открыв тот файл.

 

Sanja

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

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

#4

12.12.2016 12:53:45

Можно имя заменить номером

Код
Workbooks(fileopenname).Worksheets(1).Columns("A:A").PasteSpecial Paste:=xlPasteValues

Изменено: Sanja12.12.2016 12:53:54

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

 

Louie77

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

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

Выдает ошибку

Изменено: Louie7712.12.2016 13:07:15

 

Louie77

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

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

Workbooks(«копирование столбцов.xlsx»).Worksheets(1).Columns(«A:A»).Copy

На этой строке выходит  Run-time error ‘9’:
Subscript out of range.  Что я могу сделать?

 

Sanja

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

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

#7

12.12.2016 14:03:47

Цитата
Louie77 написал:
На этой строке выходит  Run-time error ‘9’:

Потому что в коде имя книги копирование столбцов.xlsx, а реально он называется копирование столбцов.xlsm

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

 

Louie77

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

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

 Поменяла, теперь ругается этими же словами на вторую строчку, куда копируем. Там-то что ему не так? :(

 

Louie77

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

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

Я может ошибаюсь, но Application.GetOpenFilename  не возвращает ли нам весь путь к файлу? А нам ведь надо вынуть оттуда только имя с расширением?

 

Sanja

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

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

#10

12.12.2016 14:26:08

Цитата
Louie77 написал:
не возвращает ли нам весь путь к файлу?
Код
fName = CreateObject("Scripting.FileSystemObject").GetFileName(fileopenname)
Workbooks(fName).Worksheets(1).Columns("A:A").PasteSpecial Paste:=xlPasteValues

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

 

Louie77

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

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

#11

12.12.2016 14:30:19

спасибо большое вам за помощь. У меня благодаря вам тоже получилось нечто. Не так красиво, как у вас, но тоже работает:

Код
'активируем книгу куда копируем
    W = fileopenname
    NF = Dir(W)
    Workbooks(NF).Worksheets(1).Columns("A:A").PasteSpecial Paste:=xlPasteValues

       Спасибо еще раз огромное за вашу помощь.

Изменено: Louie7712.12.2016 14:31:49

 

Sanja

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

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

#12

12.12.2016 14:32:41

Код
Workbooks("копирование столбцов.xlsx").Worksheets(1).Columns("A:A").Copy
'можно заменить на
ThisWorkbook.Worksheets(1).Columns("A:A").Copy

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

 

Louie77

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

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

Это будет совсем хорошо, тогда макрос становится универсальным для меня :D

 

Louie77

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

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

Пойду допишу в макрос еще сотню столбцов, это ведь был, так сказать  , пробный. :D

 

Kuzmich

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

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

#15

12.12.2016 14:56:23

Цитата
‘активируем книгу куда копируем

Так она у вас и так активна ( при открытии книги)

 

Louie77

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

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

Я знаю :oops:. Просто я ворона, убрала в комментарии и скопировала все до кучи. Спасибо за  замечание, буду внимательнее.

 

Louie77

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

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

#17

12.12.2016 15:12:52

Выложу сюда то, что получилось, вдруг кому пригодится

Код
Sub Макрос5()
' макрос копирует из открытой книги, откуда он запущен, столбцы в другую книгу, выбранную пользователем с помощью диалоговой формы

' открываем книгу куда будем копировать
        fileopenname = Application.GetOpenFilename(fileFilter:="Книги Excel (*.xls*), *.xls*", Title:="Введите путь к файлу данных")
        Workbooks.OpenText Filename:=fileopenname, Origin:=866 _
        , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
        , Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
        TrailingMinusNumbers:=True
        Application.ScreenUpdating = False
    'Workbooks("копирование столбцов.xlsm").Worksheets(1).Columns("A:A").Copy
    'можно заменить на
     ThisWorkbook.Worksheets(1).Columns("A:A").Copy
     fName = CreateObject("Scripting.FileSystemObject").GetFileName(fileopenname)
     Workbooks(fName).Worksheets(1).Columns("A:A").PasteSpecial Paste:=xlPasteValues
     Workbooks(fName).Activate
     Application.ScreenUpdating = True
     MsgBox "Копирование завершено"
     
End Sub

Изменено: Louie7712.12.2016 15:17:19

 

Kuzmich

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

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

#18

12.12.2016 15:39:53

Цитата
‘можно заменить на     ThisWorkbook.Worksheets(1).Columns(«A:A»).Copy     fName = CreateObject(«Scripting.FileSystemObject»).GetFileName(fileopenname)     Workbooks(fName).Worksheets(1).Columns(«A:A»).PasteSpecial Paste:=xlPasteValues     Workbooks(fName).Activate

На мой взгляд

Код
'можно заменить на
     ThisWorkbook.Worksheets(1).Columns("A:A").Copy
     ActiveWorkbook.Worksheets(1).Columns("A:A").PasteSpecial Paste:=xlPasteValues
  

Try this, it sets two ranges’ values equal, which will keep the data, but no formatting. It should be quicker.

Sub Macro1()
Dim wb1 As Workbook
'Set it to be the file location, name, and file extension of the Working File
Set wb1 = Workbooks.Open("Z:XXXWorking File.xlsx")

MsgBox "Copying Fields within Working File"

With wb1.Worksheets(1)
    .Columns("H").Value = .Columns("G").Value
    .Columns("O").Value = .Columns("J").Value
    .Columns("N").Value = .Columns("K").Value
    .Columns("P").Value = .Columns("M").Value
End With

wb1.Close SaveChanges:=True

End Sub

Note you’re using a whole column, so it might hang up or take a little longer. If you want, you can instead just get the last Row of each column and use that to shorten the ranges being copied.

Edit: As mentioned above, you may be better off using a smaller range. This is a little more verbose, but you should be able to follow what it’s doing:

Sub Macro1()
Dim wb1 As Workbook
Dim lastRow As Long
'Set it to be the file location, name, and file extension of the Working File
Set wb1 = ActiveWorkbook

MsgBox "Copying Fields within Working File"

With wb1.Worksheets(1)
    lastRow = .Cells(.Rows.Count, "G").End(xlUp).Row
    .Range("H1:H" & lastRow).Value = .Range("G1:G" & lastRow).Value

    lastRow = .Cells(.Rows.Count, "J").End(xlUp).Row
    .Range("O1:O" & lastRow).Value = .Range("J1:J" & lastRow).Value

    lastRow = .Cells(.Rows.Count, "K").End(xlUp).Row
    .Range("N1:N" & lastRow).Value = .Range("K1:K" & lastRow).Value

    lastRow = .Cells(.Rows.Count, "M").End(xlUp).Row
    .Range("P1:P" & lastRow).Value = .Range("M1:M" & lastRow).Value
End With

wb1.Close SaveChanges:=True

End Sub

Bottom line: Learn 3 different ways to copy and paste cells or ranges in Excel with VBA Macros.  This is a 3-part video series and you can also download the file that contains the code.

Skill level: Beginner

3 Ways to Copy and Paste in Excel with VBA Macros

Copy & Paste: The Most Common Excel Action

Copy and paste is probably one of the most common actions you take in Excel.  It’s also one of the most common tasks we automate when writing macros.

There are a few different ways to accomplish this task, and the macro recorder doesn’t always give you the most efficient VBA code.

In the following three videos I explain:

  • The most efficient method for a simple copy and paste in VBA.
  • The easiest way to paste values.
  • How to use the PasteSpecial method for other paste types.

You can download the file I use in these videos below.  The code is also available at the bottom of the page.

Video #1: The Simple Copy Paste Method

You can watch the playlist that includes all 3 videos at the top of this page.

Video #2: An Easy Way to Paste Values

Video #3: The PasteSpecial Method Explained

VBA Code for the Copy & Paste Methods

Download the workbook that contains the code.

'3 Methods to Copy & Paste with VBA
'Source: https://www.excelcampus.com/vba/copy-paste-cells-vba-macros/
'Author: Jon Acampora

Sub Range_Copy_Examples()
'Use the Range.Copy method for a simple copy/paste

    'The Range.Copy Method - Copy & Paste with 1 line
    Range("A1").Copy Range("C1")
    Range("A1:A3").Copy Range("D1:D3")
    Range("A1:A3").Copy Range("D1")
    
    'Range.Copy to other worksheets
    Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet2").Range("A1")
    
    'Range.Copy to other workbooks
    Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy _
        Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1")

End Sub


Sub Paste_Values_Examples()
'Set the cells' values equal to another to paste values

    'Set a cell's value equal to another cell's value
    Range("C1").Value = Range("A1").Value
    Range("D1:D3").Value = Range("A1:A3").Value
     
    'Set values between worksheets
    Worksheets("Sheet2").Range("A1").Value = Worksheets("Sheet1").Range("A1").Value
     
    'Set values between workbooks
    Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1").Value = _
        Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Value
        
End Sub


Sub PasteSpecial_Examples()
'Use the Range.PasteSpecial method for other paste types

    'Copy and PasteSpecial a Range
    Range("A1").Copy
    Range("A3").PasteSpecial Paste:=xlPasteFormats
    
    'Copy and PasteSpecial a between worksheets
    Worksheets("Sheet1").Range("A2").Copy 
    Worksheets("Sheet2").Range("A2").PasteSpecial Paste:=xlPasteFormulas
    
    'Copy and PasteSpecial between workbooks
    Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy
    Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteFormats
    
    'Disable marching ants around copied range
    Application.CutCopyMode = False

End Sub

Paste Data Below the Last Used Row

One of the most common questions I get about copying and pasting with VBA is, how do I paste to the bottom of a range that is constantly changing?  I first want to find the last row of data, then copy & paste below it.

To answer this question, I created a free training video on how to paste data below the last used row in a sheet with VBA.  Can I send you the video?  Please click the image below to get the video.

Paste Data Below Last Used Row VBA Free Training

Free Training on Macros & VBA

The 3 videos above are from my VBA Pro Course.  If you want to learn more about macros and VBA then checkout my free 3-part video training series.

I will also send you info on the VBA Pro Course, that will take you from beginner to expert.  Click the link below to get instant access.

Free Training on Macros & VBA

Please leave a comment below with any questions.  Thanks!

На чтение 3 мин. Просмотров 51.7k.

Итог: Изучите 3 различных способа копирования и вставки ячеек или диапазонов в Excel с помощью макросов VBA. Это серия из трех частей, также вы сможете скачать файл, содержащий код.

Уровень мастерства: Начинающий

Копировать и вставить: наиболее распространенное действие Excel

Копирование и вставка, вероятно, является одним из самых
распространенных действий в Excel. Это также одна из самых распространенных
задач, которые мы автоматизируем при написании макросов.

Есть несколько различных способов выполнить эту задачу, и устройство записи макросов не всегда дает вам наиболее эффективный код VBA.

В следующих трех видео я объясняю:

  • Самый эффективный метод для простого копирования
    и вставки в VBA.
  • Самый простой способ вставить значения.
  • Как использовать метод PasteSpecial для других
    типов вставок.

Видео № 1: Простой метод «Копировать-вставить»

Видео лучше всего просматривать в полноэкранном HD.

Sub Примеры_копирования_диапазона()
'Используйте метод Range.Copy для простого копирования / вставки

    'Метод Range.Copy - копирование и вставка с 1 строкой
    Range("A1").Copy Range("C1")
    Range("A1:A3").Copy Range("D1:D3")
    Range("A1:A3").Copy Range("D1")
    
    'Range.Copy с одного листа на другой
    Worksheets("Лист1").Range("A1").Copy Worksheets("Лист2").Range("A1")
    
    'Range.Copy с одного файла (на другой
    Workbooks("План.xlsx").Worksheets("Лист1").Range("A1").Copy _
        Workbooks("Факт.xlsx").Worksheets("Лист1").Range("A1")

End Sub

Видео № 2: Простой способ вставить значения

Sub Копируем_только_значения()
'Установите значения ячеек равными другим, чтобы вставить значения

'Устанавливает равенство одного диапазона другому
    Range("C1").Value = Range("A1").Value
    Range("D1:D3").Value = Range("A1:A3").Value
     
'Равенство значений между листами
    Worksheets("Лист1").Range("A1").Value = Worksheets("Лист2").Range("A1").Value
     
'Равенство значений между книгами
    Workbooks("Факт.xlsx").Worksheets("Лист1").Range("A1").Value = _
        Workbooks("План.xlsx").Worksheets("Лист1").Range("A1").Value
        
End Sub

Видео № 3: Метод PasteSpecial

Sub Копируем_с_помощью_специальной_вставки()
'Используйте метод Range.PasteSpecial для выбора типа вставки

 'Копируем и вставляем через СпецВставку
Range("A1").Copy
Range("A5").PasteSpecial Paste:=xlPasteFormats

'Используем спецвставку между листами
Worksheets("Лист1").Range("A2").Copy
Worksheets("Лист2").Range("A2").PasteSpecial Paste:=xlPasteFormulas

'Используем спецвставку между файлами
Workbooks("План.xlsx").Worksheets("Лист1").Range("A3").Copy
Workbooks("Факт.xlsx").Worksheets("Лист1").Range("A1").PasteSpecial Paste:=xlPasteFormats

'Убираем "бегающих муравьёв" после копирования (очищаем буфер обмена)
Application.CutCopyMode = False    
   
End Sub

Вставить данные ниже последней заполненной строки

Один из самых распространенных вопросов, которые я получаю о копировании и вставке с помощью VBA: «Как мне вставить данные в конец таблицы? «

Сначала нужно найти последнюю заполненную строку данных, а затем скопировать и вставить ниже неё.

Переходите по ссылке, чтобы научиться 3 способам поиска последней заполненной ячейки

Содержание

  • Строки и столбцы — вставка против вставки
  • Копировать всю строку
  • Копировать весь столбец
  • Копировать строки или столбцы на другой лист

Это руководство научит вас копировать (или вырезать) целые строки или столбцы с помощью VBA. Мы рассмотрим копирование и вставку диапазонов ячеек в другой статье.

Сначала мы покажем вам, как вставлять или вставлять скопированные строки / столбцы, и обсудим различия. Затем мы покажем вам все различные способы ссылки на строки и столбцы при копировании или вырезании.

Строки и столбцы — вставка против вставки

При вставке строк и столбцов у вас есть два варианта: вы можете вставить существующую строку (или столбец) или вставить новую строку (или столбец).

Давайте посмотрим на разницу …

Копировать и вставить существующую строку / столбец

Это скопирует строку 1 и вставит ее в существующую строку 5:

1 Диапазон («1: 1»). Копировать диапазон («5: 5»)

Это скопирует столбец C и вставит его в столбец E:

1 Диапазон («C: C»). Копировать диапазон («E: E»)

Копировать и вставить строку / столбец

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

Это скопирует строку 1 и вставит ее в строку 5, сдвинув существующие строки вниз:

12 Диапазон («1: 1»). КопироватьДиапазон («5: 5»). Вставить

Это скопирует столбец C и вставит его в столбец E, сдвинув существующие столбцы вправо:

12 Диапазон («C: C»). КопироватьДиапазон («E: E»). Вставить

Копировать всю строку

Ниже мы покажем вам несколько способов скопировать строку 1 и вставить в строку 5.

1 Диапазон («1: 1»). Копировать диапазон («5: 5»)
1 Диапазон («A1»). Диапазон всей строки. Копия («A5»)
1 Ряды (1) Копировать ряды (5)

Вырезать и вставить строки

Просто используйте Вырезать вместо Копировать, чтобы вырезать и вставить строки:

1 Ряды (1) Вырезать ряды (5)

Копировать несколько строк

Вот примеры одновременного копирования нескольких строк:

1 Диапазон («5: 7»). Копировать диапазон («10:13»)
1 Диапазон («A5: A7»). Диапазон всей строки.Копия («A10: A13»)
1 Ряды (5: 7) Копировать ряды (10:13)

Копировать весь столбец

Вы можете копировать целые столбцы аналогично копированию целых строк:

1 Диапазон («C: C»). Копировать диапазон («E: E»)
1 Диапазон («C1»). Целый столбец.Копировать Диапазон («C1»). Целый столбец
1 Столбцы (3). Диапазон копирования (5)

Вырезать и вставить столбцы

Просто используйте Вырезать вместо Копировать, чтобы вырезать и вставить столбцы:

1 Диапазон («C: C»). Диапазон обрезки («E: E»)

Копировать несколько столбцов

Вот примеры одновременного копирования нескольких столбцов:

1 Диапазон («C: E»). Копировать диапазон («G: I»)
1 Диапазон («C1: E1»). Целый столбец.Копировать Диапазон («G1: I1»)
1 Столбцы (3: 5). Копировать столбцы (7: 9)

Копировать строки или столбцы на другой лист

Чтобы скопировать на другой лист, просто используйте объект листа:

1 Листы («sheet1»). Диапазон («C: E»). Копировать листы («sheet2»). Диапазон («G: I»)

Вырезать строки или столбцы на другой лист

Вы можете использовать ту же технику, чтобы вырезать и вставить строки или столбцы на другой лист.

1 Листы («sheet1»). Диапазон («C: E»). Отдельные листы («sheet2»). Диапазон («G: I»)

Вы поможете развитию сайта, поделившись страницей с друзьями

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Копировать стиль ячейки excel
  • Копировать содержимое ячейки excel формула
  • Копировать содержимое ячейки excel в другую ячейку
  • Копировать макрос макросом excel
  • Копировать содержимое ячейки excel без формулы

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии