Макрос для копирования строки в 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»)


 

Medium

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

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

Здравствуйте, уважаемые форумчане! Помогите пожалуйста.

Имеется таблица Excel с данными (заявками клиента), где каждая строка это отдельная заявка (название клиента, адрес, телефон, и т.д.).
На данный момент при оформлении новой заявки от уже имеющегося клиента (есть в таблице) я произвожу такие действия:
— с помощью «CTRL+F» делаю поиск по названию клиента или адресу, копирую строку с предыдущей заявкой этого клиента.
— нажатием «CTRL+стрелка вниз» перехожу к последней записи в таблице.
— еще раз нажимаю «стрелку вниз» и вставляю скопированную строку.
— исправляю необходимые данные в заявке.

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

Изменено: Medium07.07.2017 10:16:02

 

Владимир

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

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

Здравствуйте.
Нужен файл-пример, достаточно 20-50 строк (не надо весь рабочий файл). Покажите, что есть и что хотите получить на выходе.

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

Ігор Гончаренко

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

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

#3

07.07.2017 10:50:14

Цитата
Medium написал:
— исправляю необходимые данные в заявке.

макрос, который скопирует строку, может очистить и эти ячейки, чтобы оператор не пропустил их случайно и не оставил там старые данные

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Medium

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

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

Владимир, в приложении файл с несколькими записями.

Я хочу добавить в файле кнопку, к которой будет привязан макрос, который выделенную мной строку скопирует в первую свободную строку снизу. Например, в моем файле получится, что скопированную строку мы вставим в сроку №8 (она первая пустая).

 

Владимир

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

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

#5

07.07.2017 11:21:53

Цитата
Владимир написал:
покажите, что есть и что хотите получить на выходе.

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

kuklp

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

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

E-mail и реквизиты в профиле.

#6

07.07.2017 11:54:32

Код
Public Sub www()
    Cells(ActiveCell.Row, 1).Resize(, 9).Copy Cells(Rows.Count, 1).End(xlUp)(2)
End Sub

Я сам — дурнее всякого примера! …

 

Medium

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

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

#7

07.07.2017 12:27:23

Я сделал следующее своими кривыми руками:

Код
Sub Скопировать_вставить()

' Скопировать_вставить макрос


    With ActiveCell
    Range(Cells(.Row, 1), Cells(.Row, 10)).Copy
End With
    Selection.End(xlToLeft).Select
    Selection.End(xlToLeft).Select
    Selection.End(xlToLeft).Select
    Selection.End(xlToLeft).Select
    Selection.End(xlToLeft).Select
    Selection.End(xlDown).Select
    ActiveCell(2).Activate
    ActiveSheet.Paste

End Sub

В принципе работает.
Ошибка только в случае если я выделяю последнюю занятую ячейку, так как в этом случае ActiveCell(2).Activate не возможен.

Прикрепленные файлы

  • kniga_zayavok.xlsm (64.78 КБ)

 

Medium

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

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

kuklp, спасибо! У вас получилось гораздо компактнее и без ошибки что есть в моем макросе!

Изменено: Medium07.07.2017 12:38:20

 

Владимир

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

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

#9

07.07.2017 12:56:32

В этом случае вообще кнопка не нужна. Только макрос нужно поместить в модуль листа.

Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lstr&
If Target.Cells.Count <> 10 Then Exit Sub  'если выделено НЕ 10 ячеeк, то выходим
    lstr = Cells(Rows.Count, 1).End(xlUp).Row 'получаем номер последней заполненной строки
    If Not Intersect(Target, Range([A4], Cells(lstr, 10))) Is Nothing Then
        Application.EnableEvents = False
            Range(Cells(Target.Row, 1), Cells(Target.Row, 10)).Copy Cells(Rows.Count, 1).End(xlUp)(2)
        Application.EnableEvents = True
    End If
End Sub

Изменено: Владимир07.07.2017 13:40:16

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

jeka-irbis

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

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

#10

23.02.2023 13:37:35

Цитата
написал:
Public Sub www()    Cells(ActiveCell.Row, 1).Resize(, 9).Copy Cells(Rows.Count, 1).End(xlUp)(2)End Sub

Спасибо, подходит под мою задачу)
Подскажите, пожалуйста, есть ли вариант макроса для копирования в конец таблицы НЕСКОЛЬКО выделенных (последовательно) строк?

Despite many posts I have looked through being of along the same lines as my question, none of the answers satisfy what I am looking for. If you can link me to one I’d gladly read it.

I have a workbook with worksheets. For simplicity, let’s say my workbook has a worksheet. And in my worksheet which is called «Sheet1», there is data in cells A1 to A4.

What I want my VBA code to do is:

  1. Copy row 1 (or specifically cells A1 to A4) of Workbook ‘A’ into Range variable ‘myRange’
  2. Create a new workbook, let’s call this one Workbook ‘B’
  3. Give Workbook ‘B’s default «sheet1» a new name to «Test Name»
  4. Open Workbook ‘B’ (though I realise that VBA code «Workbooks.Add» opens a new book so this step may be redundant since Workbooks.Add covers half of point 2 and 3)
  5. Paste ‘myRange’ into first row of ‘Workbook B’
  6. Save ‘Workbook B’ with name «Test Book» and a timestamp enclosed in square brackets. The file must also be of the file extension «xls»
  7. Close ‘Workbook B’ and return to ‘Workbook A’

What I have so far is this:

Sub OpenAndSaveNewBook()
    'Declarations
    Dim MyBook As String
    Dim MyRange As Range
    Dim newBook As Workbook

    'Get name of current wb
    MyBook = ThisWorkbook.Name
    Set MyRange = MyBook.Sheets("Sheet1").Range("A1,F1")

    'Create/Open new wb
    newBook = Workbooks.Add

    'Save new wb with XLS extension
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "/" & "TEST-BOOK", _
                            FileFormat:=xlNormal, CreateBackup:=False

    '===NOTE: BEFORE THE FOLLOWING RUNS I NEED TO PERFORM ACTIONS ON CELLS VIA VBA ON
    '===WORKBOOK 'A'. DOES THE NEWLY CREATE WORKBOOK BECOME THE PRIMARY/ACTIVE WORKBOOK
    '===? AND SO THEN DO I NEED TO ACTIVATE WORKBOOK 'A'? 
    ActiveWorkbook.Close savechanges:=True

    'Return focus to workbook 'a'
    MyBook.Activate
End Sub

As you can see, I am lacking the code that will handle:

  • the pasting of my copied data to the new workbook
  • the changing of the new workbook’s sheet1 name to something else
  • adding a timestamp to the filename string on save

Lastly, I have included a question in my code as I think I may have a misunderstanding of the ActiveWorkbook method. AFAIK when the code «Workbooks.Add» runs this becomes the Active Workbook, i.e. one with the focus. Does this effect how the VBA code running on Workbook ‘A’? Does this mean that if I wanted to add code to manipulate cells of Workbook ‘A’ then I would need to use «MyBook.Activate» where ‘MyBook’ holds the string of Workbook ‘A’s actual title?

Any help will be greatly appreciated.

Thanks,
QF

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Option Explicit         ' Обязательное объявление переменных
Option Compare Text     ' отсутствие чувствительности к регистру при сравнении символов
 
Sub Raspredelenie_po_listam()
    Const FirstRow& = 7 ' Константа - первая строка данных ниже шапки на всех листах
    Dim i&, j&, LastRow&, LastRowTarget&, ShName, Sh_Target As Worksheet, Prefix$, FormulaRC$, A
    Application.ScreenUpdating = False ' Временное отключение обновления экрана в Excel
    For Each ShName In Array("Лист2", "Лист3", "Лист4") ' Цикл по 3 листам с результатами для очистки старых данных
        With Sheets(ShName) ' Работа с объектом Sheet через символ "."
            LastRowTarget = .Cells(.Rows.Count, "Z").End(xlUp).Row ' Определение последней заполненной строки по столбцу Z
            If LastRowTarget < FirstRow Then LastRowTarget = FirstRow  ' последняя заполненная строка не должна быть меньше FirstRow  (=7)
            .Rows(FirstRow & ":" & LastRowTarget).Clear    ' Удаление строк со старыми данными при новом распределении
        End With
    Next ShName
    With Лист1 ' Работа с объектом Лист1 (программное имя объекта) через символ "."
        LastRow = .Cells(.Rows.Count, "Z").End(xlUp).Row  ' Определение последней заполненной строки по столбцу Z
        Prefix = "=" & Лист1.Name & "!R" ' Первая часть ссылочных формул
        A = .Range(.Cells(1, 1), .Cells(LastRow, 15)).Value ' Формируем массив для проверки условий
        For i = FirstRow To LastRow ' Цикл по строкам анализируемого листа
            A(i, 8) = Trim(A(i, 8)) ' удаление пробелов спереди и сзади в элементах 8-го столбца массива
            A(i, 15) = Trim(A(i, 15))
            If A(i, 8) = "ЗБС" Or A(i, 8) = "ВНС" Then ' Комплекс условий 1
                Set Sh_Target = Лист2 ' Объектная ссылка на лист цель.
            ElseIf (A(i, 8) = "Конс" Or A(i, 8) = "Раск") And A(i, 15) = "Я" Then ' Комплекс условий 2
                Set Sh_Target = Лист3 ' Объектная ссылка на лист цель.
            Else ' если не выполняется ни 1-ый ни 2-ой комлекс условий
                Set Sh_Target = Лист4 ' Объектная ссылка на лист цель.
            End If
            .Range(.Cells(i, 1), .Cells(i, "AU")).Copy  ' копирование  i-той строки (по AU,для последующей вставки форматов)
            FormulaRC = Prefix & Format(i) & "C"  ' 2-я часть ссылочной формулы
            With Sh_Target '  Работа с объектом листом-целью, куда копируем форматы, через символ "."
                 LastRowTarget = .Cells(.Rows.Count, "Z").End(xlUp).Row + 1 ' Определение последней пустой строки по столбцу Z
                 If LastRowTarget < FirstRow Then LastRowTarget = FirstRow
                .Cells(LastRowTarget, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ' вставка скопированных форматов
                .Rows(LastRowTarget).RowHeight = Лист1.Rows(i).RowHeight ' Выравнивание высоты строки по исходной
                .Range(.Cells(LastRowTarget, 1), .Cells(LastRowTarget, "AU")).FormulaR1C1 = FormulaRC  ' заполнение целевого диапазона ссылочными формулами
            End With
        Next i
    End With
    Set Sh_Target = Nothing ' Очистка памяти от объектных ссылок
End Sub

Содержание

  1. VBA Copy / Paste Rows & Columns
  2. Rows & Columns – Paste vs. Insert
  3. Copy & Paste Over Existing Row / Column
  4. Copy & Insert Row / Column
  5. Copy Entire Row
  6. Cut and Paste Rows
  7. Copy Multiple Rows
  8. VBA Coding Made Easy
  9. Copy Entire Column
  10. Cut and Paste Columns
  11. Copy Multiple Columns
  12. Copy Rows or Columns to Another Sheet
  13. Cut Rows or Columns to Another Sheet
  14. VBA Code Examples Add-in
  15. VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)
  16. Метод Range.Cut
  17. Синтаксис
  18. Параметры
  19. Метод Range.Copy
  20. Синтаксис
  21. Параметры
  22. Метод Worksheet.Paste
  23. Синтаксис
  24. Параметры
  25. Примеры
  26. 43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”
  27. VBA Excel. Буфер обмена (копирование, вставка, очистка)
  28. Копирование и вставка ячеек
  29. Буфер обмена и переменная
  30. Объект DataObject
  31. Копирование текста из переменной в буфер обмена
  32. Копирование текста из буфера обмена в переменную
  33. Очистка буфера обмена
  34. Функции для работы с буфером обмена
  35. 8 комментариев для “VBA Excel. Буфер обмена (копирование, вставка, очистка)”
  36. Метод Range.Copy (Excel)
  37. Синтаксис
  38. Параметры
  39. Возвращаемое значение
  40. Пример
  41. Поддержка и обратная связь
  42. Способы VBA работы с ячейками Excel
  43. Копировать и вставить: наиболее распространенное действие Excel
  44. Вставить данные ниже последней заполненной строки

VBA Copy / Paste Rows & Columns

In this Article

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…

Copy & Paste Over Existing Row / Column

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

This will copy column C and paste it into column 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:

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

Copy Entire Row

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

Cut and Paste Rows

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

Copy Multiple Rows

Here are examples of copying multiple rows at once:

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!

Copy Entire Column

You can copy entire columns similarily to copying entire rows:

Cut and Paste Columns

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

Copy Multiple Columns

Here are examples of copying multiple columns at once:

Copy Rows or Columns to Another Sheet

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

Cut Rows or Columns to Another Sheet

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

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

Источник

VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)

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

Метод Range.Cut

Синтаксис

Параметры

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

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

Метод Range.Copy

Синтаксис

Параметры

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

Метод Worksheet.Paste

Синтаксис

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

Параметры

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

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

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

Примеры

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

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

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

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

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

43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”

Странно, что не рассмотрено копирование ячеек, которые Cells.
Например, следующая строка копирует ячейку A1 в B2

а эта делает тоже самое, но демонстрирует,
как можно добавить размер и смещение:

Здравствуйте!
Скажите, как можно копировать на Лист 1, а вставить на Лист 2 диапазон ячеек целиком, либо отсортированный по 1 признаку диапазон(например по какому-то определенному значению, скажем, числу «500» в одном столбце Листа 1)?

Привет, Максим!
Вот пример сортировки таблицы по значению 500 в первом столбце на «Лист6» и копирования диапазона с «Лист6» на «Лист4» :

Спасибо большое, только я, наверно, неправильно описал ситуацию.
Сперва из эталонной таблицы Лист 1 копируем весь список на существующий Лист4.
Затем, пропускаем шапку, и, начиная со строки7, уже на Лист4 ищем строку, у которой в столбце 5 стоит число 500.
Вырезаем эту строку и вставляем на позицию строки 7. т.е первая после шапки.
Ищем следующую строку — вырезаем, потом вставляем на позицию строки 7+1=8 и т.д.
В итоге оставим только те строки, у которых в столбце 5 стоит число «500», остальные удаляются строки.

(пробовал менять местами строки в предыдущем коде, ошибок нет, копирует, переходит на лист 4, но строки на нем не удаляет, циклы пошагово проходят, но ничего не изменяется.)

Источник

VBA Excel. Буфер обмена (копирование, вставка, очистка)

Работа с буфером обмена в VBA Excel: копирование и вставка ячеек, копирование текста из переменной, очистка буфера обмена. Объект DataObject. Примеры.

Копирование и вставка ячеек

Копирование содержимого и форматов ячеек (диапазона) в буфер обмена осуществляется методом Range.Copy, а вставка – методом Worksheet.Paste:

При вставке диапазона ячеек из буфера обмена на рабочий лист достаточно указать верхнюю левую ячейку места (диапазона) вставки.

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

Буфер обмена и переменная

Передача текста между переменной и буфером обмена в VBA Excel осуществляется с помощью объекта DataObject. Стоит иметь в виду, что на некоторых компьютерах DataObject может некорректно работать при открытом окне проводника.

Объект DataObject

Подробнее об элементе DataObject вы можете прочитать на сайте разработчиков.

Методы объекта DataObject:

Метод Описание
GetFromClipboard Копирует данные из буфера обмена в DataObject
GetText Извлекает текстовую строку из объекта DataObject в указанном формате
PutInClipboard Перемещает данные из DataObject в буфер обмена
SetText Копирует текстовую строку в DataObject, используя указанный формат

Копирование текста из переменной в буфер обмена

Копирование текста из буфера обмена в переменную

Очистка буфера обмена

Специального метода для очистки буфера обмена в VBA Excel нет. Для решения этой задачи можно использовать выход из режима вырезания-копирования:

Следующий пример демонстрирует вставку скопированной ячейки «A1» в ячейки «A2» и «A3» и отсутствие вставки в ячейки «A4» и «A5» после строки Application.CutCopyMode = False :

Оператор On Error Resume Next необходим для обработки (пропуска) ошибки, возникающей при вставке из пустого буфера обмена.

Функции для работы с буфером обмена

В некоторых системах, начиная с Windows 8, метод DataObject.PutInClipboard не работает правильно: если открыт хотя бы один экземпляр Проводника (папка), в буфер обмена записываются два квадратика. Следующие функции должны решить эту проблему:

Пример использования функций для работы с буфером обмена:

8 комментариев для “VBA Excel. Буфер обмена (копирование, вставка, очистка)”

Код — не работает ▼

В А1 вставляется какой-то непечатаемый символ и всё. При переходе к другому приложению и попытке вставить содержимое буфера — фиаско.

Добрый день, Михаил!
Такое встречается, начиная с Windows 8, когда открыта хотя бы одна папка в Проводнике. Я добавил в статью функции для работы с буфером обмена, они должны работать.

В Win 8.1 такой проблемы не наблюдаю, уж по всякому погонял, пытаясь вызвать ошибку — всегда правильно отрабатывает ))
А за статью большое спасибо!

Нашёл такую информацию на случай получения ошибки относительно типа данных DataObject.
Чтобы заработал тип данных «DataObject» нужно подключить инструмент «Microsoft Forms Object Libraries». Для этого необходимо выполнить действия в редакторе макросов Эксель:
1. Открыть Tools/References;
2. Через кнопку Browse открыть файл C:WINDOWSSYSTEM32FM20.DLL. Файл «FM20.DLL» может оказаться в другой подпапке Windows, поискать по названию. Может быть в «SysWOW64» или в «System».

Источник

Метод Range.Copy (Excel)

Копирует диапазон в указанный диапазон или в буфер обмена.

Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.

Синтаксис

выражение.Copy (Destination)

выражение: переменная, представляющая объект Range.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Destination Необязательный Variant Указывает новый диапазон, в который будет скопирован заданный диапазон. Если этот аргумент опущен, Microsoft Excel копирует диапазон в буфер обмена.

Возвращаемое значение

Пример

В следующем примере кода копируются формулы ячеек A1:D4 с листа Sheet1 в ячейки с E5:H8 на листе Sheet2.

В приведенном ниже примере кода проверяется значение столбца D для каждой строки на листе Sheet1. Если значение в столбце D равно «A», вся строка копируется на лист SheetA в следующую пустую строку. Если значение равно «B», строка копируется на лист SheetB.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Способы VBA работы с ячейками Excel

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Макрос копирования строк n-ое количество раз ниже непустых

Markovich

Дата: Среда, 04.11.2020, 13:35 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Здравствуйте, уважаемые форумчане! Большое вам спасибо за этот форум, за вашу открытость и готовность помочь в решении непосильных для многих любителей excel задач. Затрудняюсь сосчитать сколько почерпнул здесь полезных решений. Сразу скажу что в макросах не силен, но нужно осилить задачу. Есть таблица, в которую заносятся данные по объектам, количество заполняемых строк может быть от 50 и более 2000. В таблице данные анализируются и просчитываются множеством формул и также с использованием условного форматирования. Из-за большого количества строк с формулами таблица тормозит. Соответственно заготовка таблицы рассчитана на большое количество вводимых данных. Если вводимых данных пара десятков, то оставшаяся пара тысяч строк пересчитывается вхолостую. Хотелось бы создать макрос для копирования строк заданное количество раз для распространения формул. Подобные макросы видел, и в т.ч. очень интересный на этом форуме. Но у меня задача несколько сложнее. Нужно чтобы копировалась строка следующая после строки, в которой заполнена ячейка столбца F листа «Исходные данные» (т.е. по первой пустой ячейки столбца F). Одновременно должна копироваться та же самая строка на листе «service» (эти листы взаимосвязаны формулами). Количество копируемых строк определяет ячейка M4 «Технические сведения». Т.е. смысл в том, что изначально в заготовке 100 строк, я вношу данные и при недостатке строк с формулами макросом добавляется определенное количество строк, если не хватает строк, то еще добавляется. Количество требуемых строк изначально неизвестно. Протаскивать строки неудобно, т.к. в формулах есть массивы и есть еще другая таблица также взаимосвязанная с данной построчно. В приложенном файле пример таблицы. Буду благодарен за любую помощь в решении задачи.

К сообщению приложен файл:

5002093.xls
(40.0 Kb)

 

Ответить

Pelena

Дата: Среда, 04.11.2020, 22:49 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.
Не уверена, что правильно поняла, особенно про второй лист. Вариант в файле.

К сообщению приложен файл:

8656480.xls
(49.0 Kb)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Markovich

Дата: Четверг, 05.11.2020, 09:30 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Pelena, большое Вам спасибо! Макрос работает как надо. Только хотелось бы уточнить, как на втором листе сделать, чтобы не была выделена после работы макроса штрих-пунктиром последняя скопированная строка (выделение не снимается). И еще хотел бы спросить, что нужно изменить в макросе, чтобы копировалась строка номер 9 на десятую (нужно для связанной таблицы). И еще каким образом можно сделать, чтобы макрос не работал (например, выдавал ошибку), если заполнено меньше 100 строк.

 

Ответить

Pelena

Дата: Четверг, 05.11.2020, 13:50 |
Сообщение № 4

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Так подойдёт?

К сообщению приложен файл:

3958089.xls
(52.5 Kb)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Markovich

Дата: Четверг, 05.11.2020, 16:43 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Pelena, да, с ограничением на количество заполненных строк правильно. Вы меня уж извините, я с самого начала как то витиевато поставил вопрос и не сразу заметил в результате… Задача: нужно копировать строку с первой пустой ячейкой столбца F (после заполненных). там в других ячейках этой строки множество формул. а в созданных макросах копируется строка с последней заполненной ячейкой столбца F. «строка для копирования» — это имелось ввиду пустая ячейка столбца F.

Сообщение отредактировал MarkovichЧетверг, 05.11.2020, 16:45

 

Ответить

Pelena

Дата: Четверг, 05.11.2020, 18:42 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Ну, прибавьте единичку к номеру последней заполненной строки)

К сообщению приложен файл:

1163493.xls
(56.5 Kb)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Markovich

Дата: Четверг, 05.11.2020, 19:14 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Большое спасибо! То что надо.

 

Ответить

Markovich

Дата: Четверг, 31.12.2020, 02:27 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Доброго времени суток, форумчане! С наступающим Новым годом! При попытке начать использование макроса, любезно написанного Pelena(ой) выявилась проблема: столбец Q на листе «service» является отражением столбца F на листе «Исходные данные», таблицы работают синхронно. Т.о. в столбце Q на листе «service» всегда присутствует формула ссылки на столбец F листа «Исходные данные» и из-за этого макрос не работает должным образом (ячейка без текста, но с формулой не считается пустой). Самостоятельно преодолеть проблему не получается. Вариантов решения в голове крутится два: либо как то определять в столбце Q последнюю ячейку с текстом и следующую строку ячейкой Q без текста (но с формулой) копировать заданное количество раз, либо определять номер строки с первой пустой ячейкой столбца F (после заполненных) листа «Исходные данные» и строку с этим номером, на листе «service» копировать заданное количество раз. Не понимаю какой из вариантов проще реализовать, но подошел бы любой из них. Подскажите, пожалуйста, способ решения.
P.S. Часть макроса с копированием строк на листе «Исходные данные» работает как надо.

К сообщению приложен файл:

_v.2.xls
(55.0 Kb)

Сообщение отредактировал MarkovichЧетверг, 31.12.2020, 02:28

 

Ответить

Pelena

Дата: Четверг, 31.12.2020, 09:22 |
Сообщение № 9

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте. И Вас с наступающим!
Не уверена, что правильно поняла, проверьте так

К сообщению приложен файл:

7970913.xls
(49.0 Kb)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Markovich

Дата: Четверг, 31.12.2020, 11:22 |
Сообщение № 10

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Pelena, преогромнейшее Вам спасибо! Работает как нужно. Хотел таблицу свою в обкатку до Нового года запустить и Вы прям подарок новогодний сделали, что все получилось. Еще раз с наступающим и пусть Новый год будет лучше прежнего во всем, здоровья и всех благ Вам в Новом году!

 

Ответить

Markovich

Дата: Пятница, 01.01.2021, 08:49 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

С Новым годом, форумчане!!! Подскажите, пожалуйста, что нужно изменить в макросе, чтобы все также, как и в предыдущем вопросе, заданное количество раз вставлялись строки синхронно в два листа и в них копировались строки с первой пустой ячейкой столбца F листа «Исходные данные» и Q листа «service» соответственно, НО только, чтобы строки вставлялись не после последней заполненной ячейки, а выше той ячейки, в которой установлен курсор (активной), но копировались бы в них все также строки по первой пустой ячейке.

К сообщению приложен файл:

2996807.xls
(49.5 Kb)

 

Ответить

Markovich

Дата: Понедельник, 11.01.2021, 10:48 |
Сообщение № 12

Группа: Пользователи

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Pelena, не сочтите за наглость… у меня еще вопрос возник по макросу добавления строк. Можно ли сделать, чтобы макрос запускался автоматически, если в ячейке A6 (в примере) значение будет <10 и при этом отображалось сообщение типа «выполняется добавление строк». ну и ручное добавление по нажатию кнопки сохранить также хотелось бы?

К сообщению приложен файл:

6963307.xls
(73.5 Kb)

Сообщение отредактировал MarkovichПонедельник, 11.01.2021, 10:49

 

Ответить

How to copy and paste data using a Macro in Excel. I’ll show you multiple ways to do this, including across worksheets and workbooks.

Sections:

Simple Copy/Paste

Copy Entire Range

Copy between Worksheets

Copy between Workbooks

Notes

Simple Copy/Paste

Range("A1").Copy Range("B1")

This copies cell A1 to cell B1.

Range(«A1»).Copy is the part that copies the cell.

Range(«B1») is the cell where the data will be copied.

This is a simple one line piece of code and it’s very easy to use.

Notice that there is a space between these two parts of the code.

Copy Entire Range

Range("A1:A5").Copy Range("B1:B5")

Range(«A1:A5»).Copy is the part that copies the range.

Range(«B1:B5») is the range where the data will be copied.

You can also write it like this:

Range("A1:A5").Copy Range("B1")

Notice that the range to where you will copy the data has only a reference to cell B1.

You only have to reference the very first cell to which the range will be copied and the entire range will copy in the cells below there.

NOTE: if you do it like this, you may end up overwriting data and Excel will not give you a warning about this; the data will simply be filled down as far as it needs to go to copy the first range.

Copy between Worksheets

Sheets("Sheet1").Range("A1").Copy Sheets("Sheet2").Range("B1")

This follows the same pattern as the above examples except that we need to tell the macro from which sheet we want to get the data and to which sheet we want to copy the data.

Sheets(«Sheet1»). is placed in front of the first range and that means to get the data from Sheet1, which is the name of a worksheet in the workbook.

Sheets(«Sheet2»). is placed in front of the range to which we want to copy the data and Sheet2 is the name of the worksheet where the data will be copied.

Copy between Workbooks

Workbooks("Copy and Paste Data using Macro VBA in Excel.xlsm").Sheets("Sheet1").Range("A1").Copy Workbooks("Copy and Paste Data using Macro VBA in Excel.xlsm").Sheets("Sheet3").Range("A1")

Here, we follow the above examples and, this time, add a reference to the workbooks from which we want to get the data and to which we want to place the data.

Workbooks(«Copy and Paste Data using Macro VBA in Excel.xlsm»). is the code that says in which workbook we want to place the data. Copy and Paste Data using Macro VBA in Excel.xlsm is the name of the workbook. In this example I used this for both parts, the workbook from which the data comes and where it goes. This allows you to run this macro within a single workbook and still show you how it works. In a real-world example, the first part contains the name of the workbook where you get the data from and the second contains the name of the workbook where you want to place the data.

Read this tutorial to copy values from another workbook, even if it’s closed.

Notes

All examples in the attached workbook have been commented out. Simply remove the single quote from the line of code you want to test and then run the macro.

cf5e0ebf6d62c9ec73df03c55f727e77.jpg

Download the attached file to get these examples in Excel.

Similar Content on TeachExcel

Activate or Navigate to a Worksheet using Macros VBA in Excel

Tutorial: Make a particular worksheet visible using a macro in Excel.
This is called activating a wo…

Get the Name of a Worksheet in Macros VBA in Excel

Tutorial: How to get the name of a worksheet in Excel using VBA and Macros and also how to store tha…

Get the Last Row using VBA in Excel

Tutorial:
(file used in the video above)
How to find the last row of data using a Macro/VBA in Exce…

Remove Dashed Lines from Copy Paste VBA in Excel

Tutorial: How to remove the flashing dashes from a copy/paste range using VBA in Excel; this removes…

Copy one range and paste in another range

Tutorial: Below is a macro, just copy and paste it into a module in your workbook and go from there…

Guide to Combine and Consolidate Data in Excel

Tutorial: Guide to combining and consolidating data in Excel. This includes consolidating data from …

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

Понравилась статья? Поделить с друзьями:
  • Макрос для конкретной ячейки в excel
  • Макрос для колонтитулов word
  • Макрос для колонтитула excel
  • Макрос для изменения размера рисунков в word
  • Макрос для изменения размера рисунка в word