Excel скопировать макросом значение ячейки

 

Denis_pog

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

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

#1

09.03.2014 08:36:54

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

Как с помощью макроса сделать кнопку  «Копировать»?
Чтоб при открытии листа нажав на кнопку «Копировать» ранее определенные ячейки копировались в буфер обмена, конечно лучше в открытую программу, но хотя бы в буфер.

Нашел что то похожее

Код
sub button_click 
Dim MyData As DataObject 
MyData.SetText "строка текста", 1 
MyData.PutInClipboard
end sub

только вместо  «строка текста», 1 , должны быть данные из определенных ячеек, именно данные а не формулы.

Изменено: Denis_pog09.03.2014 20:12:30

 

gling

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

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

#2

09.03.2014 13:35:35

А макрорекордером не пробовали создать макрос?

Цитата
Как с помощью макроса сделать кнопку «Копировать»?

Макросом кнопки не делают, макрос «вешают» на готовую кнопку.

 

gling

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

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

#3

09.03.2014 14:00:28

Цитата
лучше в открытую программу, но хотя бы в буфер.

Для того чтобы в буфере осталась информация необходимо в параметрах буфера обмена установить галочки либо автоматическое отображение буфера, либо сбор данных без отображения буфера. Только во втором случае при вставке данных буфер придется отобразить. А код для копирования диапазона А1:Е10 на Листе1 записан макрорекодером.

Код
Sub Вбуфер()
    Sheets("Лист1").Range("A1:E10").Copy
    Application.CutCopyMode = False
End Sub
 

Изменено: gling09.03.2014 20:12:53

 

Denis_pog

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

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

 

Denis_pog

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

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

#5

10.03.2014 04:29:12

Цитата
Application.CutCopyMode = False

за что отвечает данная строка?
без нее то же все отлично работает.

 

gling

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

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

#6

10.03.2014 09:29:03

Она убирает отмеченный диапазон копирования. Если её не написать то при случайном нажатии Ctrl+V будет вставляться этот диапазон в активную ячейку и далее. Если вместо этих двух строк написать

Код
 Sheets("Лист1").Range("A15:E24")=Sheets("Лист1").Range("A1:E10").Value

То диапазон сразу копируется без буфера обмена. Только надо знать куда. Я указал диапазон ниже начиная с А15.

 

Denis_pog

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

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

#7

10.03.2014 09:36:13

Цитата
gling пишет: То диапазон сразу копируется без буфера обмена. Только надо знать куда.

Спасибо, мне нужно копировать данные в другую программу, как я понял сделать можно, но через API для меня это пока сложновато.

 

gling

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

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

#8

10.03.2014 09:42:54

Цитата
для меня это пока сложновато.

Для меня тоже.

 

Hugo

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

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

В другую программу можно копировать с помощью AutoIt — поищите форумы по этой программе.

 

Denis_pog

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

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

 

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

Изменено: Марьян Ковач26.03.2015 22:26:50

 

Максим Зеленский

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

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

Microsoft MVP

#12

27.03.2015 12:15:57

Код
Sub button_click()
Dim MyData As New MSForms.DataObject
MyData.SetText ActiveCell.Text, 1
MyData.PutInClipboard
End Sub

F1 творит чудеса

 

Nikki

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

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

Что-то не работает, выдает Compile error: User-defined type not defined

Изменено: Nikki27.03.2015 17:58:21

 

RAN

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

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

Добавьте форму в файл. Заработает.
Саму форму можно после и удалить.

 

vlad7790

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

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

RAN, а вы не подскажите, какую форму вы имели ввиду?

 

Yarosik

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

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

Привет
прошу, помогите новичку.

задача такая:
автоматическое копирование результата из ячейки С5 в буфер обмена, чтобы затем вставить в другой программе по Ctrl+V.

процесс: в ячейку С3 вводятся данные измерения и нажимаем Enter, а в ячейке С5 появляются расчетные значения. Вот их и нужно автоматически копировать в буфер обмена.
Спасибо.

Изменено: Yarosik26.06.2019 15:39:15

 

Юрий М

Модератор

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

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

#17

26.06.2019 21:09:39

Скопируйте в модуль листа:

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C3")) Is Nothing Then Range("C5").Copy
End Sub
 

Yarosik

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

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

#18

27.06.2019 13:23:05

Юрий М,

Спасибо, работает как и задумывалось

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


На чтение 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

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!

Pekin

1

Копировать только значения

11.02.2013, 12:00. Показов 32736. Ответов 4

Метки нет (Все метки)


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

Добрый день.

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

PureBasic
1
Sheets("Sheets"1).Range(sCopyAddress).Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol)

Что надо изменить в этой строке, чтобы вставлялись только значения?

Programming

Эксперт

94731 / 64177 / 26122

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

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

11.02.2013, 12:00

4

Скрипт

5468 / 1148 / 50

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

Сообщений: 3,514

11.02.2013, 12:14

2

Вариант № 1:

Visual Basic
1
2
3
4
5
6
Sub Procedure_1()
 
    Range("A1").Copy
    Range("B1").PasteSpecial Paste:=xlPasteValues
 
End Sub

Вариант № 2:

Visual Basic
1
2
3
4
5
Sub Procedure_2()
 
    Range("B1").Value = Range("A1").Value
 
End Sub

Примечание

С большими диапазонами ячеек быстрее работает PasteSpecial, чем второй вариант.



1



Pekin

11.02.2013, 12:26

3

@Скрипт

Спасибо за предлагаемые решения.

Моя проблема в том, что мне необходимо минимально изменить приведенный код, поскольку весь код громоздкий и используется множество команд (в приведенном коде, например, используется Offset) и вероятность проблем с новым кодом высока

Хотел бы увидеть предложение к конкретному коду (именно по нему не могу найти как выполнить данную задачу)

Watcher_1

356 / 162 / 27

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

Сообщений: 350

11.02.2013, 12:40

4

Visual Basic
1
2
Sheets("Sheets1").Range(sCopyAddress).Copy
wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial Paste:=xlPasteValues



1



2 / 2 / 0

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

Сообщений: 46

16.10.2019, 09:20

5

не работает…

пишет ошибку expected end of statement



0



Like this post? Please share to your friends:
  • Excel скопировать макрос word
  • Excel скопировать лист с рисунками
  • Excel скопировать каждую третью строку
  • Excel скопировать имена ячеек
  • Excel скопировать значения нескольких ячеек в одну