Макросы в 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»)


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

 

zixoge111

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

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

Как сделать макрос, который будет постоянно копировать одну ячейку, как текст, в другую?

 

Юрий М

Модератор

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

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

Для начала записать саму процедуру копирования макрорекордером.

 

zixoge111

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

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

 

Dyroff

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

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

#4

17.04.2017 11:47:06

zixoge111,

Код
Sub Макрос2()
    Range("B3").Select 'выделяем ячейку в которую хотим вставить
    Selection.NumberFormat = "@" 'устанавливаем текстовый формат ячейки 
    Range("A3").Select 'выделяем и копируем нужную ячеку
    Selection.Copy
    Range("B3").Select
    ActiveSheet.Paste 'вставляем в отформатированную  заранее ячейку 
End Sub

Изменено: Dyroff17.04.2017 11:48:22

Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!

 

zixoge111

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

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

#5

17.04.2017 11:50:26

Цитата
Dyroff написал:
ActiveSheet.Paste ‘вставляем в отформатированную  заранее ячейку

Спасибо, а это копирование будет именно как вставка Текста? (чтобы формула не скопировалась)

 

Юрий М

Модератор

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

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

#6

17.04.2017 11:50:28

Цитата
zixoge111 написал:
В виде кода пожалуйста)

Включите рекордер, выполните нужное копирование, остановите рекордер — получите код.

 

Dyroff

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

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

zixoge111,  Вам Юрий М — советует очень хороший и простой способ:) Этой займет у Вас не более одной минуты.
Откройте макрорекордер, нажмите запись, встаньте в нужную ячейку откуда хотите скопировать, скопируйте, встаньте в ячейку, в которую нужно перенести -специальная вставка- вставить как значения. Остановите запись. Откройте макрос- нажмите изменить и увидите код)

Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!

 

zixoge111

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

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

А как этот макрос зациклить, чтобы он постоянно копировал?

Изменено: zixoge11117.04.2017 12:20:51

 

Юрий М

Модератор

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

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

zixoge111, почитайте эту

статью

. Способ 2.

 

copper-top

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

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

#10

17.04.2017 12:33:04

zixoge111, затем посмотрите эту

тему

.

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

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

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

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

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

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

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

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

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

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

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

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

End Sub

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

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

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

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

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

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

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

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

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

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

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

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

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

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!

Содержание

  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 не только между массивом и диапазоном, но и между двумя диапазонами одинаковой размерности:

Источник

53 / 3 / 0

Регистрация: 08.10.2011

Сообщений: 200

1

Копирование данных из одной ячейки в другую

25.10.2011, 21:51. Показов 15909. Ответов 18


Студворк — интернет-сервис помощи студентам

Добрый вечер. С данным заданием, как и с Visual Basic сталкиваюсь впервые, но мне очень важно решить это задание. Помогите, пжлста!
Заранее спасибо
Программу надо написать на Visual Basic в excel.
Напишите программу, которая выполняет следующие действия. Программу написать в двух вариантах: с оператороми циклов for и do.
В ячейках А1:В10 находится 20 чисел. Составить программу, которая копирует данные числа в колонну С(ячейки с С1 до С20) следующим образом:
-числа из ячейки А1 надо скопировать в ячейку С1;
-числа из ячейки B1 надо скопировать в ячейку С2;
-числа из ячейки А2 надо скопировать в ячейку С3;
-числа из ячейки B2 надо скопировать в ячейку С4;
-числа из ячейки А3 надо скопировать в ячейку С5;
И так далее (числа из колонны А надо скопировать в ряды, с нечетными номерами колонны С, а числа из колонны В, надо скопировать в ряды с четными номерами колонны С).



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

25.10.2011, 21:51

18

Апострофф

Заблокирован

25.10.2011, 22:01

2

С циклом For

Visual Basic
1
2
3
For i = 1 To Range("A1:B10").Count
  Cells(i, 3) = Range("A1:B10")(i)
Next i



0



53 / 3 / 0

Регистрация: 08.10.2011

Сообщений: 200

25.10.2011, 22:08

 [ТС]

3

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



0



Апострофф

Заблокирован

25.10.2011, 22:18

4

Эту процедуру вставляешь в модуль листа или в общий модуль.

Visual Basic
1
2
3
4
5
6
Sub Макрос1()
Dim I As Long
For I = 1 To Range("A1:B10").Count
  Cells(I, 3) = Range("A1:B10")(I)
Next I
End Sub

Запускаем по [Alt+F8].



1



53 / 3 / 0

Регистрация: 08.10.2011

Сообщений: 200

25.10.2011, 22:25

 [ТС]

5

Апострофф, спасибо



0



0 / 0 / 0

Регистрация: 01.03.2011

Сообщений: 44

25.10.2011, 22:34

6

Объясните пожалуйста как работает алгоритм)



0



Апострофф

Заблокирован

25.10.2011, 22:46

7

Цитата
Сообщение от FRANZEE
Посмотреть сообщение

Объясните пожалуйста как работает алгоритм)

Visual Basic
1
2
3
4
5
For I = 1 To Range("A1:B10").Count 'перебираем все ячейки указанного диапазона
  Cells(I, 3) = Range("A1:B10")(I) ' _
  Cells(I, 3) - ячейка в i-ой строке 3-го столбца активного листа. _
  Range("A1:B10")(I) - если в диапазоне указана одна координата, счет идет слева направо, затем сверху вниз.
Next I



0



letnjaja

53 / 3 / 0

Регистрация: 08.10.2011

Сообщений: 200

25.10.2011, 23:19

 [ТС]

8

А что значит Dim?

Добавлено через 32 минуты
c do циклом может выглядеть как-то так?:

Visual Basic
1
2
3
4
5
6
7
Sub macros2( ) 
Dim I As Long
i=1
Do while i<Range("A1:B10").Count
Cells(I, 3) = Range("A1:B10")(I)
Next I
End Sub



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

25.10.2011, 23:29

9

Цитата
Сообщение от letnjaja
Посмотреть сообщение

А что значит Dim?

Ставим курсор в это слово, жмем F1.
Если с аглицким туго, спросите у Яндекса vba dim. Проделайте то же с Do.



0



letnjaja

53 / 3 / 0

Регистрация: 08.10.2011

Сообщений: 200

26.10.2011, 19:31

 [ТС]

10

Visual Basic
1
2
3
4
5
6
7
8
Sub macros2( ) 
Dim I As Long
i=1
Do while i<Range("A1:B10").Count
Cells(I, 3) = Range("A1:B10")(I)
Next I
Loop
End Sub

полистала нет, добавила loop,скажите, что не так?



0



1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

26.10.2011, 20:16

11

6 строку пробуем в мусорку



0



Апострофф

Заблокирован

26.10.2011, 20:23

12

Visual Basic
1
2
3
4
5
i=1
Do while i<=Range("A1:B10").Count 'а не < 
Cells(I, 3) = Range("A1:B10")(I)
i=i+1'а не Next I
Loop



0



53 / 3 / 0

Регистрация: 08.10.2011

Сообщений: 200

26.10.2011, 20:35

 [ТС]

13

спасибо огромное!



0



FRANZEE

0 / 0 / 0

Регистрация: 01.03.2011

Сообщений: 44

27.10.2011, 22:12

14

Visual Basic
1
Cells(I, 3) = Range("A1:B10")(I)

почему после Range(«A1:B10») мы пишем (I) ?



0



Апострофф

Заблокирован

27.10.2011, 22:16

15

Потому что обращаемся к I-ой ячейке указанного диапазона.



1



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

27.10.2011, 23:54

16

Цитата
Сообщение от Апострофф
Посмотреть сообщение

Потому что обращаемся к I-ой ячейке указанного диапазона

В первом приближении — да. На самом деле, выражение Range(«A1:B10»)(I) означает Range(«A1:B10»).Cells(I), а если совсем подробно, то Range(«A1:B10»).Cells.Item(I)
Метод Cells может приподнести сюрприз Запустите этот код на чистом листе:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub TestRangeIndex()
Dim i&, r As Range
Set r = [E7:G11]
r.Interior.ColorIndex = 6
MsgBox "Нумеруем ячейки диапазона " & r.Address(0, 0)
For i = 1 To r.Count
    r(i) = i
Next
If MsgBox("Готовы пойти дальше?", vbYesNo) <> vbYes Then Exit Sub
For i = i To r.Count * 2
    r(i) = i
Next
If MsgBox("Постарайтесь угадать, где находятся ячейки с ОТРИЦАТЕЛЬНЫМИ номерами." & vbLf & _
    "Продолжить?", vbYesNo) <> vbYes Then Exit Sub
For i = -r.Count To 0
    r(i) = i
Next
MsgBox "Ну как, угадали? ;)"
End Sub



0



0 / 0 / 0

Регистрация: 01.03.2011

Сообщений: 44

28.10.2011, 00:01

17

Вроде ошибка где-то?

Миниатюры

Копирование данных из одной ячейки в другую
 



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

28.10.2011, 00:12

18

Это не ошибка, это сюрприз



0



0 / 0 / 0

Регистрация: 01.03.2011

Сообщений: 44

28.10.2011, 13:08

19

Так в чем сюрприз, объясните пожалуйста)))!



0



Понравилась статья? Поделить с друзьями:
  • Макросы в excel с формами
  • Макросы для excel с исходными кодами
  • Макросы в ворд word
  • Макросы в excel с оператором if
  • Макросы для excel поиск текста