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


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

 

Всем привет ребят. Хотел бы узнать, может у кого есть данный макрос:

Нужен макрос на копирование значений выделенных (например другим цветом) ячеек на другой лист/worksheet.

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

Заранее спасибо

Изменено: Юрий М04.01.2023 13:03:49

 

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

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

 

Предлагаю название для данной темы: «Макрос на копирование выделенных ячеек на новый лист». Прикрепляю файл

 

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

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

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

#6

04.01.2023 14:49:21

скопируйте этот

Код
Sub Макрос1() 'Для копирования выделенных ячеек на новый лист
  Selection.Copy
  Worksheets.Add(after:=Worksheets(Worksheets.Count)).Paste
End Sub

в стандартный модуль выделите лиапазон
жмите Alt+F8, найдите там Макрос1 и выполните

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

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!

0 / 0 / 0

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

Сообщений: 12

1

27.11.2017, 10:34. Показов 32428. Ответов 18


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

Здравствуйте господа программисты!

Столкнулся с непосильной задачей. Знания в написании макросов на уровне новичка, да и то, в большей степени по примерам, так что прошу помощи. Буду благодарен за любые советы.

И так, есть некий (см. вложение) в котором на первом листе заполняются данные каждый день. Хотелось бы чтобы данные с первого листа копировались на второй лист по условию: а именно на первом листе в 1ом столбце числа. Нужно копировать данные на второй лист по числам. Если второе число не вводится то по умолчанию считаем, что копирование происходит с введенного числа до конца заполненных ячеек. Копировать необходимо только с 3 по 7 столбец Листа1. С последующей выгрузкой на отправку на почту с названием которое берется с ячейки R1 лист1. Внутри два макроса. Помогите довести макрос до ума…
ЗЫ. Второй лист можно и изключить. Он у меня как буфер для отправки почты



0



2632 / 1637 / 745

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

Сообщений: 5,143

27.11.2017, 14:36

2

DEN_ZH,
Покажите, что должно получиться на 2-ом листе( как пример)



0



0 / 0 / 0

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

Сообщений: 12

27.11.2017, 14:46

 [ТС]

3

На втором листе должно получится столбцы первого листа с 3го по 7ой. определенной даты



0



0 / 0 / 0

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

Сообщений: 12

27.11.2017, 15:01

 [ТС]

4

в примере есть макрос. который я нарыл в сети, но не знаю как приспособить его под свою задачу. Макрос почта работает как полагается. Идеальный вариант бы их объеденить. И первую часть с разъяснением. так как пока далек от детального понимания



0



Narimanych

2632 / 1637 / 745

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

Сообщений: 5,143

27.11.2017, 16:08

5

DEN_ZH,

Попробуйте

Visual Basic
1
2
3
4
Sub SelectData()
c = Sheets(1).Cells(3, 3).CurrentRegion.Rows.Count
Sheets(2).Range("A3").Resize(c - 2, 5) = Sheets(1).Range(Sheets(1).Cells(3, 3), Sheets(1).Cells(c, 7)).Value
End Sub



0



0 / 0 / 0

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

Сообщений: 12

27.11.2017, 16:21

 [ТС]

6

да по копированию это то что надо, в плане столбцов. Но копирует полностью массив, а необходимо чтоб копировал только массив определенного числа. Иначе говоря должен в столбце А найти необходимое число. Положем оно находится на 15ой строке. Значит верхнюю точку массива должен присвоить не Cells(3, 3) а Cells(15, 3), далее найти наше число +1 ниже. И поставить ограничение нижнего угла массива Cells(28, 7). А если нашего числа+1 нет, то ограничится пустой ячейкой.



0



2632 / 1637 / 745

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

Сообщений: 5,143

27.11.2017, 16:42

7

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

да по копированию это то что надо, в плане столбцов. Но копирует полностью массив, а необходимо чтоб копировал только массив определенного

Я же просил … показать на втором листе….

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

да по копированию это то что надо, в плане столбцов. Но копирует полностью массив, а необходимо чтоб копировал только массив определенного числа. Иначе говоря должен в столбце А найти необходимое число. Положем оно находится на 15ой строке. Значит верхнюю точку массива должен присвоить не Cells(3, 3) а Cells(15, 3), далее найти наше число +1 ниже. И поставить ограничение нижнего угла массива Cells(28, 7). А если нашего числа+1 нет, то ограничится пустой ячейкой.

Необходимо выделить значения определенной даты…- подтвердите, правильно ли я понял?

Добавлено через 3 минуты
Вечером дома посмотрю….



0



0 / 0 / 0

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

Сообщений: 12

28.11.2017, 05:45

 [ТС]

8

Да правильно. Необходимо чтобы бралось определенное число. Если вбиваю 27.11.2017 то брался массив с11:g41
если число 28.11.2017 то соответственно массив (с42:i) где i = до свободной ячейки в столбце D. И для копирования был запрос на ввод даты. Типа:
dat1 = CDate(InputBox(«Введите начало периода»))



0



0 / 0 / 0

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

Сообщений: 12

28.11.2017, 05:46

 [ТС]

9

обновленный файл



0



DEN_ZH

0 / 0 / 0

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

Сообщений: 12

28.11.2017, 09:35

 [ТС]

10

Макрос как я понимаю должен быть что то подобие этого:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim LastRow As Long, Rw As Long 'Объявили переменный послдедних строк для двух слистов
LastRow = Cells(Rows.Count, 4).End(xlUp).Row 'Нашли номер последней строки на активном листе (там, где кнопка)
With Sheets("Лист2") 'Применительно к Лист2
Rw = .Cells(Rows.Count, 4).End(xlUp).Row + 1 'Нашли номер первой свободной строки на этом листе
Range(.Cells(3, 1), .Cells(Rw + 1, 5)).ClearContents 'Очистили ПОЛНОСТЬЮ диапазон на втором листе
Rw = 7 'Указали, что первая свободная строка =7
For i = 3 To LastRow 'Цикл со строки № 3 по последнюю заполненную (на активном листе)
If Cells(i, 1) = "27.11.2017" Then 'Если ячейка столбца 1 текущей строки = "27.11.2017", то
Range(Cells(i, 3), Cells(i, 7)).Copy .Cells(Rw, 1) 'Дипазон (текущая строка, столбцы 3:7) копируем в первую свободную ячейку второго листа
Rw = Rw + 1 'Увеличивем переменную-счётчик первой свободной строки второго листа
End If
Next
End With

Единственные поправки в том, что во-первых: If Cells(i, 1) = «27.11.2017» Then
хотелось бы забивать через ввод значений в сообщения типа: dat1 = CDate(InputBox(«Введите начало периода»))

второе: макрос копирует не значения а формулы, а надо чтоб копировал формат ячейки и данные
ну и третье: как вписать копирование шапки таблицы как константу. с первого листа массива C1:G2

Добавлено через 1 час 34 минуты
После доработки пришел к виду, что я и хотел

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 Range("C1:G2").Select
    Selection.Copy
    Sheets("Лист2").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("Лист1").Select
Dim LastRow As Long, Rw As Long 
LastRow = Cells(Rows.Count, 4).End(xlUp).Row 
With Sheets("Лист2") '
Rw = .Cells(Rows.Count, 4).End(xlUp).Row + 1
Range(.Cells(3, 1), .Cells(Rw + 1, 5)).ClearContents
Rw = 3 
For i = 3 To LastRow 
If Cells(i, 1) = "28.11.2017" Then 
Range(Cells(i, 3), Cells(i, 7)).Copy .Cells(Rw, 1)
Rw = Rw + 1 
End If
Next
End With

Не могу додумать как же вставить ввод числа (как пример dat1 = CDate(InputBox(«Введите начало периода»))), пробывал вставлять строку, и тогда начинается нескончаемый цикл с вводом числа. иначе с=говоря строка уходит в цикл

И не могу додумать как же все же на втором листе получить не формулы а значения в скопированных ячейках…

Добавлено через 3 минуты
ЗЫ. at1 = CDate(InputBox(«Введите начало периода»))) — уже приделал. пустил 1ой строкой. и ввод даты перестал входить в цикл



0



2632 / 1637 / 745

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

Сообщений: 5,143

28.11.2017, 23:05

11

DEN_ZH,

Посмотрите прикрепленный файл…
Двойной щелчок по ячейке «D1» (где написано «Время»)
Вместо Inputbox’a использовал фому…
Вводите дату в формате «ДД/ММ/ГГГГ»
Не учтены ошибки при вводе дат, таких как 31/02/2018 или 31/06/2017

Если что не понятно, пишите.

P.S. Простите за задержку, на работе -аврал.



0



DEN_ZH

0 / 0 / 0

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

Сообщений: 12

29.11.2017, 06:14

 [ТС]

12

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

Visual Basic
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
Sub SaveSheet()
 
If Len(Dir("c:12321", vbDirectory)) = 0 Then MkDir "c:12321"
Dim ActiveSht As Worksheet
Dim NewWb As Workbook
 
    Set ActiveSht = ActiveSheet
    Set NewWb = Workbooks.Add
    ActiveSht.Copy Before:=Workbooks(NewWb.Name).Sheets(1)
    With ActiveSheet.UsedRange
        .Value = .Value
    End With
    
    ActiveWorkbook.SaveAs Filename:="C:12321" & [O2]
Application.DisplayAlerts = True
 
 
 
send_soft = "C:Program FilesMozilla Thunderbirdthunderbird.exe"
 
stroka1 = " -compose to='" & "gtk-557@mail.ru"
stroka2 = "',subject='" & ActiveWorkbook.Name
stroka3 = "',body="" Сводка 14ч. " '""
stroka4 = """,attachment=" & "'C:12321" & ActiveWorkbook.Name & "'"
stroka = send_soft & stroka1 & stroka2 & stroka3 & stroka4
 
Set SMs = CreateObject("WScript.Shell")
SMs.Exec stroka
 
NewWb.Close False 'закрываем старый файл без запроса сохранения
  Worksheets("Лист1").Activate
 
End Sub



0



0 / 0 / 0

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

Сообщений: 14

15.02.2019, 11:31

13

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

У меня есть Книга с 3 листами. Лист «СВОД» заполняется каждый день. Мне надо, чтоб в зависимости от того, какой поставщик указан (столбец С), данные копировались на соответствующий лист.

Важно!!! 1) В листах поставщиков («RP» & «LK») данные не должны перезаписывать предыдущие уже существующие, а должны добавляться ниже.
2) Лист «RP» — колонка Н — это колонка I Лист «СВОД» делить на 1000
3) Лист «LK» — колонка Н — это колонка I Лист «СВОД» делить на 1000

Как я вижу должен работать макрос.

Я заполняю Лист «СВОД». Затем вызываю макрос, указываю дату (Лист «СВОД» колонка В). Соответствующие данные копируются на свои листы.

Очень прошу мне помочь с макросом в решении моей проблемы. Спасибо!

P.S почему мне не подходит вариант это все сделать через формулы и ссылки. Потому что ежедневно добавляется до 100 новых строк. Учитывая такое количество формул — работа Книги будет очень медленной! Поэтому и нужно это все сделать через макрос.



0



6875 / 2807 / 533

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

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

16.02.2019, 01:28

14

Фильтры смотрю знакомы — почему бы не использовать их для этой задачи? Зачем плодить сущности?
Или есть ещё информация, которую Вы от нас скрыли?



0



0 / 0 / 0

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

Сообщений: 14

17.02.2019, 11:06

15

Зачем задавать риторические вопросы, упиваясь своим превосходством?

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



0



6875 / 2807 / 533

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

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

17.02.2019, 16:45

16

Так если есть задача посмотреть всё что относится к «RP» — выбираете в фильтре «RP» и смотрите. И обучаете как использовать фильтр того, кто задал Вам задачу растащить это всё по листам.
А если уж так нужно растащить — включаете рекордер, фильтруете, копируете что отфильтровали на нужный лист, выключаете рекордер — макрос готов. А все ИТОГО для упрощения процесса лучше вынести наверх.



0



0 / 0 / 0

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

Сообщений: 14

17.02.2019, 17:27

17

Уважаемый Hugo121,
Я Вас не понимаю, что за глупые рекомендации? 1) Как записать макрос так, чтоб он понял критерий, по которому надо отфильтровать (дата каждый день меняется)
2) Как показать какой диапазон надо копировать? Каждый день количество строк будет разным
3) Как показать рекордеру, куда надо вставлять копируемые данные? Если листы «RP» & «LK» пополняемые, а не перезаписываемые. Как мне указать, что данные должны вставляться в следующую свободную строку?
4) А ИТОГО мне обязательно надо внизу. Поэтому макрос еще должен умете не перезаписать эту строку, а спустить ее вниз.

Если бы все так было просто, я не стал тратить свое и чужое время на переписку.



0



6875 / 2807 / 533

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

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

17.02.2019, 18:03

18

1. Сам конечно не поймёт, ну разве что по отношению к текущей дате можно высчитать. Но можете указать нужную дату в инпутбоксе например, или присобачить любой календарь, универсальнее его взять с форума.
2. Ну фильтр ведь есть? Лишнего не увидите. Или всё же не умеете пользоваться фильтром, судя по вопросу?
3. А вот это уже то, о чём умолчали — нигде ранее я не видел что данные на листы нужно дополнять, а не копировать всё что отобрано фильтром. Но и для этого на форуме полно решений — ищите «как найти последнюю строку».
Но тогда кто будет следить чтоб Вы не наплодили дублей?
4. А вот это самое сложное, вернее самое муторное, поэтому я и говорил что

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

для упрощения процесса лучше вынести наверх

5. В целом всё не особо сложно, но мне например непонятно зачем это всё вообще нужно? Почему нельзя просто дополнять один лист, там ведь более миллиона строк? И этим упростить всем (и главное себе) жизнь?

Всё, больше никаких глупых рекомендаций



0



0 / 0 / 0

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

Сообщений: 14

25.02.2019, 12:41

19

Вот помогли сделать рабочий вариант решения моей проблемы (копирование по условию)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

25.02.2019, 12:41

19

Bottom line: Learn 3 different ways to copy and paste cells or ranges in Excel with VBA Macros.  This is a 3-part video series and you can also download the file that contains the code.

Skill level: Beginner

3 Ways to Copy and Paste in Excel with VBA Macros

Copy & Paste: The Most Common Excel Action

Copy and paste is probably one of the most common actions you take in Excel.  It’s also one of the most common tasks we automate when writing macros.

There are a few different ways to accomplish this task, and the macro recorder doesn’t always give you the most efficient VBA code.

In the following three videos I explain:

  • The most efficient method for a simple copy and paste in VBA.
  • The easiest way to paste values.
  • How to use the PasteSpecial method for other paste types.

You can download the file I use in these videos below.  The code is also available at the bottom of the page.

Video #1: The Simple Copy Paste Method

You can watch the playlist that includes all 3 videos at the top of this page.

Video #2: An Easy Way to Paste Values

Video #3: The PasteSpecial Method Explained

VBA Code for the Copy & Paste Methods

Download the workbook that contains the code.

'3 Methods to Copy & Paste with VBA
'Source: https://www.excelcampus.com/vba/copy-paste-cells-vba-macros/
'Author: Jon Acampora

Sub Range_Copy_Examples()
'Use the Range.Copy method for a simple copy/paste

    'The Range.Copy Method - Copy & Paste with 1 line
    Range("A1").Copy Range("C1")
    Range("A1:A3").Copy Range("D1:D3")
    Range("A1:A3").Copy Range("D1")
    
    'Range.Copy to other worksheets
    Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet2").Range("A1")
    
    'Range.Copy to other workbooks
    Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy _
        Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1")

End Sub


Sub Paste_Values_Examples()
'Set the cells' values equal to another to paste values

    'Set a cell's value equal to another cell's value
    Range("C1").Value = Range("A1").Value
    Range("D1:D3").Value = Range("A1:A3").Value
     
    'Set values between worksheets
    Worksheets("Sheet2").Range("A1").Value = Worksheets("Sheet1").Range("A1").Value
     
    'Set values between workbooks
    Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1").Value = _
        Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Value
        
End Sub


Sub PasteSpecial_Examples()
'Use the Range.PasteSpecial method for other paste types

    'Copy and PasteSpecial a Range
    Range("A1").Copy
    Range("A3").PasteSpecial Paste:=xlPasteFormats
    
    'Copy and PasteSpecial a between worksheets
    Worksheets("Sheet1").Range("A2").Copy 
    Worksheets("Sheet2").Range("A2").PasteSpecial Paste:=xlPasteFormulas
    
    'Copy and PasteSpecial between workbooks
    Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy
    Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteFormats
    
    'Disable marching ants around copied range
    Application.CutCopyMode = False

End Sub

Paste Data Below the Last Used Row

One of the most common questions I get about copying and pasting with VBA is, how do I paste to the bottom of a range that is constantly changing?  I first want to find the last row of data, then copy & paste below it.

To answer this question, I created a free training video on how to paste data below the last used row in a sheet with VBA.  Can I send you the video?  Please click the image below to get the video.

Paste Data Below Last Used Row VBA Free Training

Free Training on Macros & VBA

The 3 videos above are from my VBA Pro Course.  If you want to learn more about macros and VBA then checkout my free 3-part video training series.

I will also send you info on the VBA Pro Course, that will take you from beginner to expert.  Click the link below to get instant access.

Free Training on Macros & VBA

Please leave a comment below with any questions.  Thanks!

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
  • Макрос для копирования текста word
  • Макрос для копирования строки в excel
  • Макрос для консолидации данных в excel