Vba excel скопировать столбец в другую книгу

 

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
  
Sub copy()
    Dim x As Workbook
    Dim y As Workbook
    Set x = Workbooks.Open("C:UsersSaurabhDesktopBook2.xls")
    Set y = Workbooks.Open("C:UsersSaurabhDesktopBook1.xls")
    x.Sheets("sheet1").Range("G2").Value = x.Sheets("sheet1").Range("A2").Value
    y.Sheets("sheet1").Range("H2").Value = x.Sheets("sheet1").Range("B2").Value
End Sub

shA.t's user avatar

shA.t

16.4k5 gold badges53 silver badges111 bronze badges

asked May 19, 2015 at 5:03

Saurabh Khurana's user avatar

5

works fine in my machine, try it

Sub copy()
    Dim x As Workbook
    Dim y As Workbook
    Set x = Workbooks.Open("C:UsersSaurabhDesktopBook2.xls")
    Set y = Workbooks.Open("C:UsersSaurabhDesktopBook1.xls")
    x.Sheets("sheet1").[A:A].copy x.Sheets("sheet1").[G:G] 'copy column from x [A:A] to x [G:G]
    x.Sheets("sheet1").[B:B].copy y.Sheets("sheet1").[H:H] 'copy column from x [B:B] to y [H:H]
End Sub

answered May 19, 2015 at 5:58

Vasily's user avatar

VasilyVasily

5,7073 gold badges20 silver badges34 bronze badges

Below code copies the cells fine

Sub copy()
    Dim x As Workbook
    Dim y As Workbook
    Set x = Workbooks.Open("C:UsersuserDesktopBook2.xlsx")
    Set y = Workbooks.Open("C:UsersuserDesktopBook1.xlsx")
    x.Sheets("sheet1").Range("G2").Value = y.Sheets("sheet1").Range("A2").Value
    x.Sheets("sheet1").Range("H2").Value = y.Sheets("sheet1").Range("B2").Value
End Sub

answered May 19, 2015 at 5:57

S.Krishna's user avatar

S.KrishnaS.Krishna

85812 silver badges26 bronze badges

3

just fix that

From

   x.Sheets("sheet1").Range("G2").Value = x.Sheets("sheet1").Range("A2").Value
   y.Sheets("sheet1").Range("H2").Value = x.Sheets("sheet1").Range("B2").Value

To

x.Sheets("sheet1").Range("G2").Value = y.Sheets("sheet1").Range("A2").Value
x.Sheets("sheet1").Range("H2").Value = x.Sheets("sheet1").Range("B2").Value  

answered May 19, 2015 at 5:13

0m3r's user avatar

0m3r0m3r

12.2k15 gold badges33 silver badges70 bronze badges

2

I’m pretty sure you need to capitalize your «s» in «sheet1», so it’s properly «Sheet1″. I believe it’s case-sensitive.

answered May 19, 2015 at 5:12

Stephen Baird's user avatar

1

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

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

Sub Название_Макроса()

'Выделить диапазон который необходимо скопировать
Range("A1:F52").Select
'Скопировать то, что выделено
Selection.Copy
ChDir "путь к папке где лежит файл в который необходимо скопировать"
Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше"
'Выделить начальную ячейку в которую необходимо вставить скопированные данные
Range("A6").Select
'Вставить данные
ActiveSheet.Paste
'сохранить текущую книгу
ActiveWorkbook.Save
'Закрыть книгу
ActiveWorkbook.Close
End Sub

Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы

Sub Название_Макроса2()
'Открываем файл с которого нужно скопировать данные
Workbooks.Open Filename:="C:Данные.xlsx"

'Скопировать нужный диапазон в открывшейся книге на листе 1
Workbooks("Данные.xlsx").Worksheets("Лист1").Range("A16:E16").Copy
'Активируем нужную нам книгу
Workbooks("Книга1.xlsm").Activate

'Выделяем и вставляем скопированные данные в ячейку А1
ActiveWorkbook.Worksheets("Лист1").Range("A1").Select
ActiveSheet.Paste

'Закрываем книгу откуда мы скопировали данные
Workbooks("Данные.xlsx").Close

End Sub

Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.

Sub Копируем_листы_в_другую_книгу()
Dim bookconst As Workbook
Dim abook As Workbook
Set abook = ActiveWorkbook 'присваиваем перменную активной книге
Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные

'переходим в активную книгу откуда необходимо скопировать данные
abook.Worksheets("Лист1").Activate
Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон
bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные
Range("A1:I23").Select 'встаем на ячейку А1
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'вставляем только форматы ячеек
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'второй лист
abook.Worksheets("Лист2").Activate
Range("A1:I23").Copy
bookconst.Worksheets("Лист2").Activate
Range("A1:I23").Select 'выделяем диапазон
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'вставляем только форматы ячеек
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'третий лист
abook.Worksheets("Лист3").Activate
Range("A1:I23").Copy
bookconst.Worksheets("Лист3").Activate
Range("A1:I23").Select 'выделяем диапазон
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'вставляем только форматы ячеек
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'сохранить текущую книгу
bookconst.Save
'Закрыть книгу
bookconst.Close
abook.Activate

End Sub

Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.

Спасибо за внимание.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub asdf()
Dim x As Integer, z As Integer, y As Integer, WB1 As Workbook, Wb2    As Workbook
Dim Sh1 As Worksheet, Sh2 As Worksheet
Set WB1 = Workbooks("тест1.xlsm")
Set Wb2 = Workbooks("тест2.xlsm")
 
WB1.Activate
x = Cells(Rows.Count, 1).End(xlUp).Row
Wb2.Activate
y = Cells(Rows.Count, 1).End(xlUp).Row
z = Rows("1:1").Find(What:="раз", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _ 
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Column
WB1.Activate
WB1.Sheets(1).Range(Cells(x + 1, 1), Cells(x + y - 1, 1)).Value = Wb2.Sheets(1).Range(Cells(2, z), Cells(y, z)).Value ' первый вариант копирования
Wb2.Activate
Wb2.Sheets(1).Range(Cells(2, z), Cells(y, z)).Copy WB1.Sheets(1).Range(Cells(x + 1, 1), Cells(x + y - 1, 1)) 'второй вариант копирования
End Sub

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


Like this post? Please share to your friends:
  • Vba excel скопировать столбец в другой столбец
  • Vba excel скопировать лист с новым именем
  • Vba excel скопировать значение в ячейку
  • Vba excel скопировать диапазон ячеек в другую книгу
  • Vba excel скопировать данные с листов в один