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»)


 

IGGI

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

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

Добрый день!
У меня такая задача. На листе А есть таблица с данными. Мне нужно данные из заранее известных ячеек таблицы, по нажатию кнопки, скопировать на лист В, при этом, при нажатии на кнопку еще раз в этот же день, данные должны переноситься в тоже самое место (или больше не переноситься), а в другой день, через строку от нижней заполненной ячейки. Т.е. данные на листе В не должны затираться, а каждое последующее копирование должно располагаться на две строчки ниже.
Простыми словами, есть дневная статистика на листе А, ее нужно архивировать по нажатию кнопки, на лист В, с текущей датой. От одной и той же даты, данные на листе А, не могут быть разные, поэтому переносить их можно или один раз в день или просто записывать их в те же самые  ячейки на листе В. В след. день, данные будут другие, их нужно расположить на листе В через строчку ниже, от предыдущих.
Буду очень рад Вашей помощи. Оговорюсь, в VBA знаний почти нет.
Спасибо.

 

Юрий М

Модератор

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

Контакты см. в профиле

#2

14.06.2013 22:52:35

Цитата
IGGI пишет: в VBA знаний почти нет

В таком случае результат получите быстрее, если разместите свою тему в разделе «Работа». Но и там потребуется Ваш файл с исходными данным и с желаемым результатом. Или ждите здесь…

 

как-то так — простенько без излишеств  :D

Изменено: kalbasiatka15.06.2013 00:44:31

 

IGGI

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

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

Kalbasiatka, спасибо Вам огромное!!! Так быстро..) Это очень похоже на то что мне нужно. Буду пробовать адаптировать для своих данных)

 

IGGI

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

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

kalbasiatka, Вы не могли бы подсказать, что нужно добавить, что бы на другую страницу переносились не только значения исходных ячеек, но и форматирование (фон ячейки, границы, шрифт и т.п)?
А так все получилось, очень рад Вашей помощи  :)

 

kalbasiatka

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

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

#6

15.06.2013 21:03:19

может так?

Код
Sub uuu()
    With Sheets("Лист2")
        lr = .Cells(Rows.Count, 1).End(xlUp).Row
        If .Cells(lr, 1) = Date Then
            Range("A2, C2, E2").Copy .Cells(lr, 1)
        Else: Range("A2, C2, E2").Copy .Cells(lr + 2, 1)
        End If
    End With
End Sub 
 

IGGI

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

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

Да, это то, что нужно!) Спасибо Вам большое, все получилось!

 

IGGI

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

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

Kolbasiatka, в моем случае все таки не получилось) В смысле у меня данные не в одной строке, а в разных. Как только в этой строке Else: Range(«A2, C2, E2» ;) .Copy .Cells(lr + 2, 1) появляются данные из разных строк, выдает ошибку. Например вот так: Else: Range(«A2, C2,

E3

» ;) .Copy .Cells(lr + 2, 1) уже не получается. Нельзя ли написать макрос, в кот. я смогу подставлять данные из множества ячеек на листе из разных строк и столбцов?
Спасибо.

 

KuklP

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

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

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

Вот поэтому Вам и порекомендовали во 2-м посте перенести тему туда, где ей самое место.

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

 

Юрий М

Модератор

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

Контакты см. в профиле

#10

16.06.2013 15:06:03

Цитата
IGGI пишет:
у меня данные не в одной строке, а в разных.

Вы об этом предупредили? Или свой файл-пример показали?

 

IGGI

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

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

#11

16.06.2013 15:50:36

Да нет, не показывал. Мне сходу предложили вариант который полностью меня устроил. А дополнительная, второстепенная задача, возникла позже. Тут я извиняюсь, пример сделаю.

Цитата
KuklP пишет:
Вот поэтому Вам и порекомендовали во 2-м посте перенести тему туда, где ей самое место.

Уважаемый, KukIP! Я так понимаю рекомендовали не Вы, Вы не модератор и по существу вопроса Вам сказать нечего. Во втором посте модератором было сказано «или ждите здесь». Так что не стоит засорять ветку, своими умными замечаниями, я разберусь без Вас.

 

Юрий М

Модератор

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

Контакты см. в профиле

#12

16.06.2013 15:57:14

Цитата
IGGI пишет:
пример сделаю.

И это правильно! :)

 

KuklP

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

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

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

#13

16.06.2013 16:03:51

Цитата
IGGI пишет:
по существу вопроса Вам сказать нечего.

Есть чего сказать. Но не для халявщиков. Тем более не для грубиянов-халявщиков. Персонально для Вас,IGGI, — форум не стол халявных заказов. Для заказов есть ветка «Работа»:

http://www.planetaexcel.ru/forum/?PAGE_NAME=list&FID=7

Цитата
IGGI пишет:
У меня такая задача… в VBA знаний почти нет…

Вот там и уместно ставить задачи.

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

 

IGGI

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

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

#14

16.06.2013 16:30:24

Цитата
KuklP пишет:
Есть чего сказать. Но не для халявщиков. Тем более не для грубиянов-халявщиков. Персонально для Вас, IGGI,  — форум не стол халявных заказов. Для заказов есть ветка «Работа»:

)) Экий Вы, ранимый безнесмен.. Покажите мне грубость в моем посте и если она там есть, я извинюсь.
А вот лично Вас, я не прошу не о помощи, не  о разъяснениях о том, что из себя представляет данный форум. Тут присутствуют люди, которые готовы помочь, не потрясая ящиком для благодарностей.  Более пожалуйста не утруждайтесь, я и так потратил на Вас много времени.

 

IGGI

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

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

Вот пример)

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

  • Пример.xlsx (13.21 КБ)

 

IGGI

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

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

#16

19.06.2013 17:21:33

Цитата
IGGI пишет:
Вот пример)

Для потомков. Вопрос был решен с помощью такого макроса:

Код
Sub архив()
Application.ScreenUpdating = False
    With Sheets("архив")
        lr = .Cells(Rows.Count, 2).End(xlUp).Row
        If .Cells(lr, 2) = Date Then
            Range("B5").Copy .Cells(lr - 1, 2)
            Range("C5").Copy
            .Cells(lr, 2).PasteSpecial Paste:=xlPasteValues
            .Cells(lr, 2).PasteSpecial Paste:=xlPasteFormats
            Range("J13:N13").Copy .Cells(lr - 1, 3)
            Range("C13:C17").Copy
            .Cells(lr, 3).PasteSpecial Transpose:=True
        Else
            Range("B5").Copy .Cells(lr + 2, 2)
            Range("C5").Copy
            .Cells(lr + 3, 2).PasteSpecial Paste:=xlPasteValues 'специальная вставка значения
            .Cells(lr + 3, 2).PasteSpecial Paste:=xlPasteFormats 'специальная вставка форматы
            Range("J13:N13").Copy .Cells(lr + 2, 3)
            Range("C13:C17").Copy
            .Cells(lr + 3, 3).PasteSpecial Transpose:=True
        End If
    End With
Application.ScreenUpdating = True
End Sub

Спасибо!

 

faridvg

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

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

Здравствуйте. А можно изменить этот макрос, чтоб он записывал данные на лист Б подряд и убрать привязку к дате?
Спасибо.

Изменено: faridvg11.07.2017 13:15:49

 

vikttur

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

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

Лучше создать новую тему с названием, отражающим суть задачи.

 

ANSWERIVER

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

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

#19

12.12.2018 15:18:55

Всем привет,

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

Код
Private Sub CommandButton3_Click()

    Range("F2").Copy
    Range("K2").Select
    ActiveSheet.Paste
    Range("F3").Copy
    Range("K3").Select
    ActiveSheet.Paste
    Range("F4").Copy
    Range("K4").Select
    ActiveSheet.Paste
    Range("F5").Copy
    Range("K5").Select
    ActiveSheet.Paste

Изменено: ANSWERIVER12.12.2018 15:19:37

Содержание

  1. Способы VBA работы с ячейками Excel
  2. Копировать и вставить: наиболее распространенное действие Excel
  3. Вставить данные ниже последней заполненной строки
  4. VBA Excel. Буфер обмена (копирование, вставка, очистка)
  5. Копирование и вставка ячеек
  6. Буфер обмена и переменная
  7. Объект DataObject
  8. Копирование текста из переменной в буфер обмена
  9. Копирование текста из буфера обмена в переменную
  10. Очистка буфера обмена
  11. Функции для работы с буфером обмена
  12. 8 комментариев для “VBA Excel. Буфер обмена (копирование, вставка, очистка)”
  13. VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)
  14. Метод Range.Cut
  15. Синтаксис
  16. Параметры
  17. Метод Range.Copy
  18. Синтаксис
  19. Параметры
  20. Метод Worksheet.Paste
  21. Синтаксис
  22. Параметры
  23. Примеры
  24. 43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”
  25. Метод Range.Copy (Excel)
  26. Синтаксис
  27. Параметры
  28. Возвращаемое значение
  29. Пример
  30. Поддержка и обратная связь
  31. VBA Excel. Диапазон ячеек и массив (обмен значениями)
  32. Копирование значений из диапазона ячеек в массив
  33. Копирование значений из массива в диапазон ячеек
  34. Обмен значениями между двумя диапазонами

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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».

Источник

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, но строки на нем не удаляет, циклы пошагово проходят, но ничего не изменяется.)

Источник

Метод 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. Диапазон ячеек и массив (обмен значениями)

Копирование значений из диапазона ячеек в массив и обратно с помощью VBA Excel. Простейшие примеры обмена значениями между диапазоном и массивом.

Копирование значений из диапазона ячеек в массив

Чтобы скопировать значения из диапазона ячеек в массив, необходимо объявить переменную универсального типа (As Variant) и присвоить ей значения диапазона ячеек с помощью оператора присваивания (=):

VBA Excel автоматически преобразует объявленную переменную в двумерный массив, соответствующий размерности диапазона ячеек, в нашем случае в массив — a(1 To 3, 1 To 3), и заполняет его значениями. Нумерация измерений массивов, созданных таким образом, начинается с единицы (1).

Можно, в этом случае, объявить сразу динамический массив, чтобы изначально указать, что эта переменная будет массивом. Так как свойством диапазона ячеек по умолчанию в VBA Excel является значение (Value), его можно в коде явно не указывать, но, при желании, можно и указать. Получится такая конструкция, аналогичная первой:

Стоит отметить, что для копирования значений из диапазона ячеек в массив можно использовать только обычную переменную или динамический массив универсального типа (Variant). VBA Excel автоматически преобразовывает их в двумерный массив. Если объявить двумерный массив с указанной заранее размерностью, использовать его не получится, будет сгенерирована ошибка с сообщением: Can’t assign to array (Нельзя назначать массив).

Копирование значений из массива в диапазон ячеек

Значения в диапазон ячеек добавляются из массива с помощью оператора присваивания (=):

Обратите внимание, что вставить значения в диапазон ячеек можно только из двумерного массива. Размерность такого массива может начинаться с нуля (0). Количество элементов в измерениях массива должно совпадать с количеством строк и столбцов в диапазоне ячеек. Если вам нужно вставить значения в одну строку или в один столбец, укажите размерность единственной строки или единственного столбца как (0) или (1 To 1), если вы хотите использовать нумерацию измерений своего массива с единицы. Например, для записи десяти значений из массива в одну строку можно объявить такой массив — massiv(9, 0), или в один столбец — massiv(0, 9).

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

Обмен значениями между двумя диапазонами

Обмен значениями можно осуществить в VBA Excel не только между массивом и диапазоном, но и между двумя диапазонами одинаковой размерности:

Источник

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

Итог: Изучите 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 способам поиска последней заполненной ячейки

In excel, I am trying to copy text from one cell to another cell in another sheet. The source cell contains formatted text (bold,underlined,different colors). But when I copy the text using VBA to the other cell, the formatting is lost.

I know it is because excel is copying only the text value. Is there a way we can read the HTML text (rather than plain text) from a cell?

I have googled this and did not get any answers. I know that if we use copy and paste methods, we can copy the formatting.
E.g.

Range("F10").Select
Selection.Copy
Range("I10").Select
ActiveSheet.Paste

But I want to do it without a copy and paste since my destination is a merged cell and not identically sized as my source cell. Is there an option available in excel VBA to do this?

EDIT:
I was able to solve it with the following code.

Range("I11").Value = Range("I10").Value
For i = 1 To Range("I10").Characters.Count
    Range("I11").Characters(i, 1).Font.Bold = Range("I10").Characters(i, 1).Font.Bold
    Range("I11").Characters(i, 1).Font.Color = Range("I10").Characters(i, 1).Font.Color
    Range("I11").Characters(i, 1).Font.Italic = Range("I10").Characters(i, 1).Font.Italic
    Range("I11").Characters(i, 1).Font.Underline = Range("I10").Characters(i, 1).Font.Underline
    Range("I11").Characters(i, 1).Font.FontStyle = Range("I10").Characters(i, 1).Font.FontStyle
Next i

Понравилась статья? Поделить с друзьями:
  • Excel макрос количество строк в таблице
  • Excel макрос количество листов
  • Excel макрос кнопка на панели
  • Excel макрос кнопка запуска макроса
  • Excel макрос как удалить всю строку