Excel скопировать одну строку vba

In this Article

  • Rows & Columns – Paste vs. Insert
    • Copy & Paste Over Existing Row / Column
    • Copy & Insert Row / Column
  • Copy Entire Row
    • Cut and Paste Rows
    • Copy Multiple Rows
  • Copy Entire Column
    • Cut and Paste Columns
    • Copy Multiple Columns
  • Copy Rows or Columns to Another Sheet
    • Cut Rows or Columns to Another Sheet

This tutorial will teach you how to copy (or cut) entire Rows or Columns using VBA. We cover copying and pasting ranges of cells in another article.

First we will show you how to paste or insert copied rows/columns and discuss the differences.  Then we will show you all of the different ways to references rows and columns when copying or cutting.

Rows & Columns – Paste vs. Insert

When pasting rows and columns you have two options:  You can paste over the existing row (or column) or you can insert a new row (or column).

Let’s look at the difference…

vba copy and paste row

Copy & Paste Over Existing Row / Column

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

Range("1:1").Copy Range("5:5")

This will copy column C and paste it into column E:

Range("C:C").Copy Range("E:E")

Copy & Insert Row / Column

Instead you can insert the copied row or column and shift the existing rows or columns to make room.

This will copy row 1 and insert it into row 5, shifting the existing rows down:

Range("1:1").Copy
Range("5:5").Insert

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

Range("C:C").Copy
Range("E:E").Insert

Copy Entire Row

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

Range("1:1").Copy Range("5:5")
Range("A1").EntireRow.Copy Range("A5")
Rows(1).Copy Rows(5)

Cut and Paste Rows

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

Rows(1).Cut Rows(5)

Copy Multiple Rows

Here are examples of copying multiple rows at once:

Range("5:7").Copy Range("10:13")
Range("A5:A7").EntireRow.Copy Range("A10:A13")
Rows("5:7").Copy Rows("10:13")

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

Copy Entire Column

You can copy entire columns similarily to copying entire rows:

Range("C:C").Copy Range("E:E")
Range("C1").EntireColumn.Copy Range("C1").EntireColumn
Columns(3).Copy Range(5)

Cut and Paste Columns

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

Range("C:C").Cut Range("E:E")

Copy Multiple Columns

Here are examples of copying multiple columns at once:

Range("C:E").Copy Range("G:I")
Range("C1:E1").EntireColumn.Copy Range("G1:I1")
Columns("3:5").Copy Columns("7:9")

VBA Programming | Code Generator does work for you!

Copy Rows or Columns to Another Sheet

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

Sheets("sheet1").Range("C:E").Copy Sheets("sheet2").Range("G:I")

Cut Rows or Columns to Another Sheet

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

Sheets("sheet1").Range("C:E").Cut Sheets("sheet2").Range("G:I")

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


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

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

What I want my VBA code to do is:

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

What I have so far is this:

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

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

    'Create/Open new wb
    newBook = Workbooks.Add

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

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

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

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

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

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

Any help will be greatly appreciated.

Thanks,
QF

Содержание

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

VBA Copy / Paste Rows & Columns

In this Article

This tutorial will teach you how to copy (or cut) entire Rows or Columns using VBA. We cover copying and pasting ranges of cells in another article.

First we will show you how to paste or insert copied rows/columns and discuss the differences. Then we will show you all of the different ways to references rows and columns when copying or cutting.

Rows & Columns – Paste vs. Insert

When pasting rows and columns you have two options: You can paste over the existing row (or column) or you can insert a new row (or column).

Let’s look at the difference…

Copy & Paste Over Existing Row / Column

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

This will copy column C and paste it into column E:

Copy & Insert Row / Column

Instead you can insert the copied row or column and shift the existing rows or columns to make room.

This will copy row 1 and insert it into row 5, shifting the existing rows down:

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

Copy Entire Row

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

Cut and Paste Rows

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

Copy Multiple Rows

Here are examples of copying multiple rows at once:

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

Copy Entire Column

You can copy entire columns similarily to copying entire rows:

Cut and Paste Columns

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

Copy Multiple Columns

Here are examples of copying multiple columns at once:

Copy Rows or Columns to Another Sheet

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

Cut Rows or Columns to Another Sheet

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

VBA Code Examples Add-in

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

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

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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 method (Excel)

Copies the range to the specified range or to the Clipboard.

Interested in developing solutions that extend the Office experience across multiple platforms? Check out the new Office Add-ins model. Office Add-ins have a small footprint compared to VSTO Add-ins and solutions, and you can build them by using almost any web programming technology, such as HTML5, JavaScript, CSS3, and XML.

Syntax

expression.Copy (Destination)

expression A variable that represents a Range object.

Parameters

Name Required/Optional Data type Description
Destination Optional Variant Specifies the new range to which the specified range will be copied. If this argument is omitted, Microsoft Excel copies the range to the Clipboard.

Return value

Example

The following code example copies the formulas in cells A1:D4 on Sheet1 into cells E5:H8 on Sheet2.

The following code example inspects the value in column D for each row on Sheet1. If the value in column D equals A, the entire row is copied onto SheetA in the next empty row. If the value equals B, the row is copied onto SheetB.

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Метод 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 и обратная связь.

Источник

0 / 0 / 0

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

Сообщений: 60

1

Копирование строки из одной книги в другую

05.10.2011, 17:50. Показов 51853. Ответов 19


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

Необходимо скопировать строку под номером 10 с активного листа активной книги, открыть книгу например С:test.xls (с одним листом) и вставить скопированные данные в 5 строку.
Помогите пожалуйста. Темы о копировании строк на форуме нашел, но не разобрался что к чему.
Заранее благодарен.



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

05.10.2011, 18:38

2

Visual Basic
1
2
3
4
Dim I As Integer
For I = 1 To 20
Cells(5, I).Value = Cells(10, I).Value
Next I

Но это уже совсем по-самодельному

Хотя мне это нравится больше, чем

Visual Basic
1
2
3
4
Rows("10:10").Copy
Rows("5:5").Select
    ActiveSheet.Paste
Application.CutCopyMode = False



1



nt_dmn

0 / 0 / 0

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

Сообщений: 60

05.10.2011, 18:43

 [ТС]

3

я делал очень похоже, но на строку

Visual Basic
1
ActiveSheet.Paste

ругается, в чем причина не пойму…



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

05.10.2011, 18:45

4

Visual Basic
1
Rows("5:5").Select

Это присутствует?



1



nt_dmn

0 / 0 / 0

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

Сообщений: 60

05.10.2011, 18:48

 [ТС]

5

Присутствует, а ругается потому что нечего вставлять, значит не копирует оператор

Visual Basic
1
Rows("10:10").Copy

, может перед ним тоже поставить

Visual Basic
1
Rows("10:10").Select

Добавлено через 1 минуту
Выделило, но опять ничего не скопировало, буфер пустой



0



Почетный модератор

21371 / 9105 / 1082

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

Сообщений: 11,014

05.10.2011, 18:51

6

Прикрепил книгу



2



nt_dmn

0 / 0 / 0

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

Сообщений: 60

06.10.2011, 10:23

 [ТС]

7

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

Добавлено через 15 часов 18 минут
Вот собственно кусок кода:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
'открываем книгу
Workbooks.Open(incoming)
'копируем строку
        Rows("10:10").Select
        Rows("10:10").Copy
        'открываем сводный отчет
        Workbooks.Open (report)
        'выбираем номер начальной строки для поиска последней записи
        nss = 2
        'ищем последнюю запись
        Do While nss <> "1"
            If Range("B" & nss).Value <> "" Then
                'увеличиваем номер строки на 1
                nss = nss + 1
            Else
                'вставляем строку из буфера
                Rows("5:5").Select
                ActiveSheet.Paste
                'присваиваем переменной номера строки значение конца цикла
                nss = 1
            End If
        Loop

Для этого поста я присвоил статичную величину при вставке (5 строка), а вообще надо вставлять в строку nss.
В чем моя ошибка может быть?



0



Busine2009

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

06.10.2011, 15:43

8

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Процедура1()
'Обращаться с книгами будем через переменные
'(кода меньше писать и не промахнёшься мимо нужной книги)
Dim Исходная As Excel.Workbook, Конечная As Excel.Workbook
Dim nss As Long
Set Исходная = ActiveWorkbook
'открываем книгу
Set Конечная = Workbooks.Open("C:Documents and SettingsПользовательРабочий столКнига2.xlsx")
'копируем строку
        Исходная.Worksheets(1).Rows("10:10").Copy
        'выбираем номер начальной строки для поиска последней записи
        nss = 2
        'ищем последнюю запись
        Do While Конечная.Worksheets(1).Range("B" & nss).Value <> ""
            'увеличиваем номер строки на 1
            nss = nss + 1
        Loop
        'вставляем строку из буфера
        Конечная.Worksheets(1).Rows(nss).PasteSpecial
        Конечная.Close SaveChanges:=True
End Sub



1



0 / 0 / 0

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

Сообщений: 60

06.10.2011, 16:11

 [ТС]

9

Так работает, спасибо!

Добавлено через 24 минуты
А ещё нюансик один остался… как добиться что бы происходило копирование только значений, а формулы не копировались в новый документ?



0



Busine2009

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

06.10.2011, 16:17

10

Visual Basic
1
Конечная.Worksheets(1).Rows(nss).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

С помощью макрорекордера можно узнавать синтаксис VBA.



1



0 / 0 / 0

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

Сообщений: 60

06.10.2011, 16:48

 [ТС]

11

Спасибо огромное, я просто не спец, сижу разбираюсь, второй день как с vba связался

Добавлено через 23 минуты

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

С помощью макрорекордера можно узнавать синтаксис VBA.

…а что такое макрорекодер?



0



Busine2009

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

06.10.2011, 17:01

12

nt_dmn,
Excel какого года у вас?



0



0 / 0 / 0

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

Сообщений: 60

06.10.2011, 17:04

 [ТС]

13

Сейчас в 2007 сижу…
А не подскажете ещё где мне отключить оповещение при закрытии файлов «в буфере обмена осталось.. бла бла бла» Чет все настройки перерыл, нету…



0



Busine2009

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

06.10.2011, 17:16

14

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

…а что такое макрорекодер?

  1. Круглая кнопкаПараметры ExcelОсновныеПоказывать вкладку «Разработчик на ленте»OK;
  2. вкладка Разработчик — группа КодЗапись макроса;
  3. проделайте какие-нибудь действия (например, введите букву А и нажмите клавишу Enter);
  4. группа КодОстановить запись;
  5. в VBA будет код, который надо подкорректировать.

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

А не подскажете ещё где мне отключить оповещение при закрытии файлов «в буфере обмена осталось.. бла бла бла» Чет все настройки перерыл, нету…

не знаю, можно это сделать с помощью интерфейса программы Excel, а программно вот так делается:
эту строку поместите перед закрытием книги:

Visual Basic
1
Application.DisplayAlerts = False

а эту после закрытия книги:

Visual Basic
1
Application.DisplayAlerts = True



1



0 / 0 / 0

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

Сообщений: 60

06.10.2011, 17:32

 [ТС]

15

Спасибо, со всем разобрался позавчера из познаний у меня был только бэйсик ук нц со школьной программы, за 2 дня уже в vba начал вникать



0



gera_vip

0 / 0 / 0

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

Сообщений: 5

13.06.2014, 15:35

16

Форумчане, подскажите, пожалуйста, как в 12 строчке кода, вместо Rows(«10:10») указать копировать заполненный диапазон, начиная от второй строчки и до конца, где есть записи.
И есть ли возможность, этот макрос привязать к какой-то новой кнопке на ленте? А то с этим еще не разбирался.
Заранее спасибо!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Процедура1()
'Обращаться с книгами будем через переменные
'(кода меньше писать и не промахнёшься мимо нужной книги)
Dim Исходная As Excel.Workbook, Конечная As Excel.Workbook
Dim nss As Long
Set Исходная = ActiveWorkbook
'открываем книгу
Set Конечная = Workbooks.Open("C:Documents and SettingsПользовательРабочий столКнига2.xlsx")
'копируем строку 
'Вот тут :)
Исходная.Worksheets(1).Rows("10:10").Copy
        'выбираем номер начальной строки для поиска последней записи
        nss = 2
        'ищем последнюю запись
        Do While Конечная.Worksheets(1).Range("B" & nss).Value <> ""
            'увеличиваем номер строки на 1
            nss = nss + 1
        Loop
        'вставляем строку из буфера
        Конечная.Worksheets(1).Rows(nss).PasteSpecial
        Конечная.Close SaveChanges:=True
End Sub



0



Hugo121

6875 / 2807 / 533

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

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

13.06.2014, 16:09

17

Попробуйте так (не проверял):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Процедура1()
'Обращаться с книгами будем через переменные
'(кода меньше писать и не промахнёшься мимо нужной книги)
    Dim Исходная As Excel.Workbook, Конечная As Excel.Workbook
    Set Исходная = ActiveWorkbook
    'открываем книгу
    Set Конечная = Workbooks.Open("C:Documents and SettingsПользовательРабочий столКнига2.xlsx")
    'копируем строку
    'Вот тут :)
    Исходная.Worksheets(1).Range("B2").CurrentRegion.Copy Конечная.Worksheets(1).Cells(Rows.Count, "B").End(xlUp)(2, 0)
    Конечная.Close SaveChanges:=True
End Sub



1



0 / 0 / 0

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

Сообщений: 5

13.06.2014, 16:19

18

Hugo, а что поменять, чтобы копировались не все данные, а начиная со второй строки и до конца, т.к. в первой строке идут названия столбцов?



0



Hugo121

6875 / 2807 / 533

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

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

13.06.2014, 16:50

19

Visual Basic
1
    Исходная.Worksheets(1).Range("B2").CurrentRegion.Offset(1).Copy Конечная.Worksheets(1).Cells(Rows.Count, "B").End(xlUp)(2, 0)

Будет правда ещё снизу одну пустую строку прихватывать — но это ведь ерунда. Можно убрать ресайсом, но лень.



1



0 / 0 / 0

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

Сообщений: 5

13.06.2014, 18:16

20

Hugo, огромнейшая благодарность!!! Работает!



0



 

Medium

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

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

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

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

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

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

 

Владимир

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

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

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

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

 

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

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

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

#3

07.07.2017 10:50:14

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

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

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

 

Medium

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

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

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

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

 

Владимир

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

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

#5

07.07.2017 11:21:53

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

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

 

kuklp

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

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

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

#6

07.07.2017 11:54:32

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

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

 

Medium

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

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

#7

07.07.2017 12:27:23

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

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

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


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

End Sub

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

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

  • kniga_zayavok.xlsm (64.78 КБ)

 

Medium

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

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

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

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

 

Владимир

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

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

#9

07.07.2017 12:56:32

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

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

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

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

 

jeka-irbis

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

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

#10

23.02.2023 13:37:35

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

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

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

Maxon_R

Дата: Понедельник, 03.07.2017, 19:14 |
Сообщение № 1

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

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

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


Excel 2016

Друзья, привет!
Уровень знаний VBA почти на нуле. Несколько дней пытаюсь сделать макрос, но безрезультатно. Прошу вашей помощи!

Суть:
При нажатии на кнопку должно производиться копирование активной (выделенной) строки со вставкой ниже, чтобы строки можно было вставлять между уже заполненными строками.
При этом важно, чтобы копировалось всё — значения, формулы, форматирование, условное форматирование
Но столбцы с B:G и с L по конец должны быть пустые.

Основная задача файла — создавать себе список задач на день.

Возможно?

Заранее благодарю!

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

4532522.xlsx
(19.8 Kb)

Сообщение отредактировал Maxon_RПонедельник, 03.07.2017, 19:16

 

Ответить

buchlotnik

Дата: Понедельник, 03.07.2017, 19:41 |
Сообщение № 2

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

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


2010, 2013, 2016 RUS / ENG

Цитата

пытаюсь сделать макрос

и где эти попытки? почему файл .xlsx?

 

Ответить

InExSu

Дата: Вторник, 04.07.2017, 09:18 |
Сообщение № 3

Группа: Друзья

Ранг: Ветеран

Сообщений: 646


Репутация:

96

±

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


Excel 2010

[vba]

Код

Sub КопированиеCтрокиНижеВыделенной()
    Dim Столбец01 As Long, Столбец02 As Long, Строка As Long
    Столбец01 = 7: Столбец02 = 12

        ActiveCell.EntireRow.Select
    Selection.Copy
    ActiveCell.Offset(1, 0).Range(«A1»).Select
    ActiveCell.EntireRow.Insert
    ActiveSheet.Paste
    Строка = ActiveCell.Row
    Range(Cells(Строка, 1), Cells(Строка, Столбец01)).Select
    Selection.Clear
    Range(Cells(Строка, Столбец01), Cells(Строка, 190)).Select
    Selection.Clear
End Sub

[/vba]


Разработчик Битрикс24 php, Google Apps Script, VBA Excel

 

Ответить

Maxon_R

Дата: Вторник, 04.07.2017, 10:50 |
Сообщение № 4

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

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

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


Excel 2016

Sub КопированиеCтрокиНижеВыделенной()
Dim Столбец01 As Long, Столбец02 As Long, Строка As Long
Столбец01 = 7: Столбец02 = 12

ActiveCell.EntireRow.Select
Selection.Copy
ActiveCell.Offset(1, 0).Range(«A1»).Select

ActiveCell.EntireRow.Insert

ActiveSheet.Paste
Строка = ActiveCell.Row
Range(Cells(Строка, 1), Cells(Строка, Столбец01)).Select
Selection.Clear
Range(Cells(Строка, Столбец01), Cells(Строка, 190)).Select
Selection.Clear
End Sub

Спасибо! Строку добавляет, но вываливается ошибка на ActiveCell.EntireRow.Insert

Сообщение отредактировал Maxon_RВторник, 04.07.2017, 10:57

 

Ответить

Maxon_R

Дата: Вторник, 04.07.2017, 10:54 |
Сообщение № 5

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

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

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


Excel 2016

и где эти попытки? почему файл .xlsx?

Потому что копировал лист из другой книги.

У меня ранее была версия, которая добавляла ячейку. При этому всё работало, т.к. было форматирование как таблица.
Сейчас хочется немного расширить функционал и уйти от форматирования таблицей.
Сейчас я код уже испортил своими попытками и выглядит он примерно так.
[vba]

Код

Sub Макрос4()
Dim i As String, j As String
i = ActiveCell.Address
ActiveCell.Select
ActiveRow.Select
Selection.Copy
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False
End Sub

[/vba]

Сообщение отредактировал Maxon_RВторник, 04.07.2017, 11:05

 

Ответить

Manyasha

Дата: Вторник, 04.07.2017, 11:05 |
Сообщение № 6

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

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


Excel 2010, 2016

Maxon_R, оформите код тегами (кнопка #)


ЯД: 410013299366744 WM: R193491431804

 

Ответить

InExSu

Дата: Вторник, 04.07.2017, 12:22 |
Сообщение № 7

Группа: Друзья

Ранг: Ветеран

Сообщений: 646


Репутация:

96

±

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


Excel 2010

ошибка на ActiveCell.EntireRow.Insert

на Excel 2010 этой ошибки не появляется.

Улучшаю:
[vba]

Код

Sub КопированиеCтрокиНижеВыделенной()
    Dim Столбец01 As Long, Столбец02 As Long, Строка As Long
    Столбец01 = 7: Столбец02 = 12

        ActiveCell.EntireRow.Select
    Selection.Copy
    ActiveCell.Offset(1, 0).Range(«A1»).Select
    Selection.EntireRow.Insert ‘или запишите макрорекордером как у вас, в 2016, вставляется строка
    ActiveSheet.Paste
    Строка = ActiveCell.Row
    Range(Cells(Строка, 1), Cells(Строка, Столбец01)).Select
    Selection.ClearContents
    Range(Cells(Строка, Столбец01), Cells(Строка, 190)).Select
    Selection.ClearContents
End Sub

[/vba]


Разработчик Битрикс24 php, Google Apps Script, VBA Excel

 

Ответить

Maxon_R

Дата: Вторник, 04.07.2017, 12:36 |
Сообщение № 8

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

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

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


Excel 2016

Selection.EntireRow.Insert ‘или запишите макрорекордером как у вас, в 2016, вставляется строка

в 16 добавление строки написалось так:

[vba]

Код

Selection.Insert Shift:=xlDown

[/vba]

Попробовал заменить строку в коде — появилась другая ошибка. :(

Сообщение отредактировал Maxon_RВторник, 04.07.2017, 12:37

 

Ответить

InExSu

Дата: Вторник, 04.07.2017, 15:50 |
Сообщение № 9

Группа: Друзья

Ранг: Ветеран

Сообщений: 646


Репутация:

96

±

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


Excel 2010

почикано


Разработчик Битрикс24 php, Google Apps Script, VBA Excel

Сообщение отредактировал InExSuВторник, 04.07.2017, 15:51

 

Ответить

sboy

Дата: Вторник, 04.07.2017, 16:56 |
Сообщение № 10

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

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


Excel 2010

Добрый день.
Проверяйте.
[vba]

Код

Sub дз()
r = ActiveCell.Row
c = Cells(8, Columns.Count).End(xlToLeft).Column
With Rows(r)
.Copy
.Insert
End With
Range(Cells(r + 1, 2), Cells(r + 1, 7)).ClearContents
Range(Cells(r + 1, 12), Cells(r + 1, c)).ClearContents
End Sub

[/vba]
[p.s.]Ну и защиту от «случайно» неправильной выбранной строки бы надо сделать

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

4532522.xlsm
(24.8 Kb)


Яндекс: 410016850021169

 

Ответить

InExSu

Дата: Вторник, 04.07.2017, 19:04 |
Сообщение № 11

Группа: Друзья

Ранг: Ветеран

Сообщений: 646


Репутация:

96

±

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


Excel 2010


Хороший код,. Не заню зачем, но топикстартер хочет
А Ваш код вставляет ВЫШЕ активной ячейки.


Разработчик Битрикс24 php, Google Apps Script, VBA Excel

 

Ответить

KuklP

Дата: Вторник, 04.07.2017, 19:54 |
Сообщение № 12

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

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


2003-2010

Ну и напишите:
[vba][/vba]и будет Вам счастье.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Pelena

Дата: Вторник, 04.07.2017, 19:58 |
Сообщение № 13

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel


Какая разница? Ведь строка копируется


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

 

Ответить

RAN

Дата: Вторник, 04.07.2017, 20:39 |
Сообщение № 14

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Цитата

И правую палочку делают так-же!

:D
А если серьезно, для 1 строки разницы нет, или почти нет, для 2 появится (или не появится).


Быть или не быть, вот в чем загвоздка!

 

Ответить

Maxon_R

Дата: Среда, 05.07.2017, 09:54 |
Сообщение № 15

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

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

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


Excel 2016

Sub дз()
r = ActiveCell.Row
c = Cells(8, Columns.Count).End(xlToLeft).Column
With Rows®
.Copy
.Insert
End With
Range(Cells(r + 1, 2), Cells(r + 1, 7)).ClearContents
Range(Cells(r + 1, 12), Cells(r + 1, c)).ClearContents
End Sub


Всё равно вылезает эта ошибка…(((

Сообщение отредактировал Maxon_RСреда, 05.07.2017, 09:55

 

Ответить

AndreTM

Дата: Среда, 05.07.2017, 10:14 |
Сообщение № 16

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

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


2003 & 2010

Всё равно вылезает эта ошибка…(((

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

Вообще, если у вас ошибки в ВАШЕМ коде — то прикладывайте ВАШИ файлы.

Потому что копировал лист из другой книги.

вообще ни о чём — при чём здесь какой-то лист из какой-то книги?..


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

Maxon_R

Дата: Среда, 05.07.2017, 10:16 |
Сообщение № 17

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

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

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


Excel 2016

Всё заработало! Большое спасибо!

 

Ответить

sboy

Дата: Среда, 05.07.2017, 10:39 |
Сообщение № 18

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

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


Excel 2010

Maxon_R, сейчас еще раз посмотрел файл и возник вопрос, а точно Вам нужно

столбцы … с L по конец должны быть пустые

???
ведь там у Вас формула


Яндекс: 410016850021169

 

Ответить

Nordheim

Дата: Пятница, 07.07.2017, 12:32 |
Сообщение № 19

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

Ранг: Прохожий

Сообщений: 6


Репутация:

1

±

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


Excel 2010

Еше вариантик :D
[vba]

Код

Sub test()
Dim i&
i = ActiveCell.Row
Rows(i + 1).Insert
Rows(i + 1).FillDown
Range(«d» & i + 1 & «:g» & i + 1).ClearContents
Range(«l» & i + 1).End(xlToRight).ClearContents
End Sub

[/vba]


Все гениальное просто и все простое гениально.

 

Ответить

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