Копирование строк в excel макросы

Копирование строк по условию из существующего набора данных в отдельную таблицу с помощью кода VBA Excel. Определение числа строк в исходной таблице.

Условие задачи

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

Решение задачи

Код VBA Excel для копирования строк исходного набора данных по условию в отдельную таблицу:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Sub KopirovaniyeStrok()

Dim s As String, n As Long, m As Long, i As Long

‘Задаем условие поиска

s = «Изображения»

‘Определяем номер последней строки исходной таблицы

n = Range(«A2»).CurrentRegion.Rows.Count

‘Задаем номер первой строки новой таблицы

m = n + 2

    For i = 2 To n

        ‘Проверяем условие

        If Cells(i, 1) = s Then

            ‘Копируем строку, удовлетворяющую условию, в новую таблицу

            Cells(i, 1).Resize(1, 3).Copy Cells(m, 1)

            m = m + 1

        End If

    Next

End Sub

При желании, можно добавить в эту процедуру еще одну переменную и автоматическое определение количества столбцов:

Dim c As Long

c = Range(«A2»).CurrentRegion.Columns.Count

Тогда выражение копирования примет следующий вид:

Cells(i, 1).Resize(1, c).Copy Cells(m, 1)


 

paha83

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

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

Доброго времени суток уважаемые форумчане!
Имею задачу которую не могу решить сам, из-за отсутствия знаний и навыков.
Исходные данные:
1. Несколько одинаковых по структуре листов (см. пример) 1, 2, 3;
2. Лист «Финиш».

Задача. С помощью VBA:
1. Скопировать строки из активнного листа либо1, либо 2… и вставить их на лист «Финиш».
Условия:
1. Копировать строки только при условии заполненной ячейки в столбце  «В»;
2. Скопированные строки должбыть вставлены как значения;
3. При копировании новых данных на лист «Финиш» они должны вставляться ниже старых;
4. Если в листе «Финиш» есть заполненные строки с копируемой датой, то старые затираются, а на их место становятся новые;
5. Перезаписать данные можно только в течении 1-го дня после указанной даты в листах 1, 2 …, либо при вводе пароля (скажем 143).

Спасибо!

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

  • Копия.xlsx (48.88 КБ)

 

CAHO

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

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

Пункт 3 и 4 противоречат друг другу. Или я не так понял.

Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.

 

paha83

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

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

Приветствую, САНО!
Спасибо за внимание.
Может быть я не так описал, попробую разъяснить.
Противоречия невижу, т.к. п. 4 нежен для того чтобы данные с одной даты не задваивались в отчете, если в течении следующего дня после копируемой даты выявится ошибка то необходима возможность внести корректировку и перезаписать данные.
А в случае если пере записывание происходит позже чем 1 день после копируемой даты (п. 5) — это для защиты данных от потери (скажем вредительство).

 

kakaccc

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

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

#4

22.09.2015 15:38:18

paha83

, если еще актуально:

Код
Sub Copy_rows_if()
Dim currentRow As Integer
Dim sourceCol As Integer
Dim LastRow As Integer
Dim currentRowValue
Dim sourcews As String

sourcews = ActiveSheet.Name 'базовый лист
sourceCol = 2   'колонка B ключевая
RowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row

For currentRow = 1 To RowCount  'для всех строк базового листа
    currentRowValue = Cells(currentRow, sourceCol).Value
    If Not (IsEmpty(currentRowValue) Or currentRowValue = "") Then
          Rows(currentRow).Copy
          Worksheets("Финиш").Select
          LastRow = Cells(Rows.Count, sourceCol).End(xlUp).Row
          Range(Cells(LastRow + 1, 1), Cells(LastRow + 1, 1)).PasteSpecial Paste:=xlPasteValues
          Worksheets(sourcews).Activate
    End If
Next
End Sub

Здесь первые 3 пункта.

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

  • Копия — копия.xlsm (54.39 КБ)

Изменено: kakaccc22.09.2015 18:11:32

 

kakaccc

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

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

#5

23.09.2015 15:35:13

Для 5 пункта:

Код
Sub zashita_dannyh()
Dim currentRow As Integer
Dim sourceCol As Integer
Dim data As String

sourceCol = 2
RowCount = Cells(1, sourceCol).End(xlDown).Row
RowCount_2 = ActiveSheet.Cells(RowCount, sourceCol).End(xlDown).Row
data = Range(Cells(RowCount, sourceCol), Cells(RowCount, sourceCol)).Value

'проверка на ошибку
For currentRow = RowCount To RowCount_2 - 2
    currentRowValue = Cells(currentRow, sourceCol).Value
    If Not (IsEmpty(currentRowValue) Or currentRowValue = "") And _
    Cells(currentRow + 1, sourceCol).Value <> currentRowValue Then
        MsgBox ("даты на лите не совпадают")
        Exit Sub
    End If
Next

'протектим лист
If Date - DateValue(data) > 1 Then
ActiveSheet.Protect Password:="143" 'пароль 143
End If
End Sub

Хотя, по-моему, без макроса будет даже проще. Пока он настроен так, что его надо запустить на каждом листе, который будет затем защищен.

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

  • Копия — копия.xlsm (55.93 КБ)

 

paha83

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

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

Доброго времени суток,

kakaccc!

Большое спасибо за ответ и помощь.
Для меня тема актуальна, т.к. схожие задачи приходится решать постоянно.

Еще раз спасибо!!!

 

rSkrin

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

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

Добрый день!
Друзья, знатоки Excel, подскажите пожалуйста решение проблемы, аналогичной вышеизложенной с небольшим усложнением. Требуется скопировать все строки таблицы ежедневного отчета, кроме шапки (т.е. начиная с 5-й строки), из листа «отчет» в лист «архив», ниже ранее скопированных, при условии заполнения  всех ячеек в столбце 5 (Е), т.е . достигнута полнота отчета. Если хоть одна ячейка в столбце 5 не заполнена не производить копирование на лист  «архив». И подскажите пожалуйста, возможно ли отображение строк на листе «архив», с рамками как в таблице на листе «отчет» или автоматическое добавление границ таблицы.

 

kakaccc

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

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

#8

27.02.2016 17:38:57

Код
Sub copy_to_archive()

Dim currentRow As Integer
Dim sourceCol As Integer
Dim LastRow As Integer
Dim currentRowValue
Dim sourcews As String
Dim Rowsnum As Integer

sourcews = ActiveSheet.Name 'базовый лист
sourceCol = 5   'Ключевая E колонка
Set myTable = Worksheets(sourcews).Range("A1").CurrentRegion
Rowsnum = myTable.Rows.Count

For currentRow = 5 To Rowsnum  'проверяем есть ли пустые в 5-ой колонке
    currentRowValue = Cells(currentRow, sourceCol).Value
    If (IsEmpty(currentRowValue) Or currentRowValue = "") Then
    MsgBox ("Внимание! Есть пустые ячейки.")
    Exit Sub
    End If
Next

For currentRow = 5 To Rowsnum  'Копируем
    Rows(currentRow).Copy
    Worksheets("Архив").Select
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    With Range(Cells(LastRow + 1, 1), Cells(LastRow + 1, 1))
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
    End With
    Worksheets(sourcews).Activate
Next
End Sub

Немного громоздкий макрос получился.
Ограничение такое: таблица должны начинаться с ячейки А1.
rSkrin, если сойдет, то потом откалибруем под ваши нужды.

Изменено: kakaccc28.02.2016 02:18:56

 

KuklP

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

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

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

#9

27.02.2016 18:36:24

kakaccc, чем по-Вашему будут отличаться результаты, если блок:

Код
For currentRow = 5 To Rowsnum 'Копируем
 Rows(currentRow).Copy
 Worksheets("Архив").Select
 LastRow = Cells(Rows.Count, 1).End(xlUp).Row
 With Range(Cells(LastRow + 1, 1), Cells(LastRow + 1, 1))
 .PasteSpecial Paste:=xlPasteValues
 .PasteSpecial Paste:=xlPasteFormats
 End With
 Worksheets(sourcews).Activate
Next

записать так:

Код
with Worksheets("Архив")
     LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
     myTable.offset(5).resize(myTable.Rows.Count-5).copy .Cells(LastRow + 1, 1)
end with

;)

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

 

TheBestOfTheBest

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

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

Excel 2010 +PLEX +SaveToDB +PowerQuery

Файл должен находиться в папке c:1. На таблице ПКМ-Обновить.

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

  • Копия.xlsx (57.41 КБ)

Неизлечимых болезней нет, есть неизлечимые люди.

 

kakaccc

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

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

KuklP, потому что я нуб в vba  :D

Спасибо! Буду теперь знать и использовать эту функцию.
Но хотел бы сначала разобраться. Объясни, пожалуйста, последнее действие: …copy .Cells(LastRow + 1, 1)
Как это работает? Это типа destination? К чему относится точка перед Cells() Почему, вообще, происходит вставка копируемого?

 

rSkrin

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

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

Спасибо друзья! Но есть вопрос. Уважаемый kakaccc, правильно ли я понял про «таблица должна начинаться с ячейки А1»- т.е.  начало всей таблицы, в том числе и шапки.  

 

rSkrin

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

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

Вопрос отменяю. Чуть подправил, проверил работу, все отлично!!! Спасибо.

 

KuklP

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

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

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

#14

28.02.2016 13:55:14

Цитата
kakaccc написал:
Это типа destination? К чему относится точка перед Cells()

Да, это destination.
выражением with Worksheets(«Архив») мы объявляем ссылку  на родительский объект Worksheets(«Архив»). дальше всему, что начинается с точки, вба будет пытаться присвоить родительский объект. Т.е. конструкцию

Код
with Worksheets("Архив")
 LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
 myTable.offset(5).resize(myTable.Rows.Count-5).copy .Cells(LastRow + 1, 1)
end with

можно записать буквально:

Код
 LastRow = Worksheets("Архив").Cells(Worksheets("Архив").Rows.Count, 1).End(xlUp).Row
 myTable.offset(5).resize(myTable.Rows.Count-5).copy Worksheets("Архив").Cells(LastRow + 1, 1)

в этом слуячае родительский объект вычисляется 3 раза вместо одного в предыдущем примере.
ВСЕ ЭТО и много другого интересного есть в справке по F1, причем составлено гораздо профессиональней и понятней чем в моем объяснении.

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

 

kakaccc

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

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

KuklP, все, раз это destination, то вопросов нет. Более менее разобрался. Буду теперь пользоваться. Красиво и лаконично получилось. Спасибо за объяснение!

rSkrin, да, вся таблица должна начинаться с А1 (шапка в вашемслучае). Можно сделать независимо от находжения таблицы, используя свойство CurrentRegion, например. Но тогда перед запуском макроса надо будет выделять какую-нибудь ячейку из таблицы. Первоначально я так и записал макрос. Не знал как для вас проще будет. Если хотите, можно так сделать.

 

0mega

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

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

#16

06.11.2022 11:54:18

KuklP

, здравствуйте

Цитата
KuklP написал:
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row

почему команда начинается с точки
LastRow = .Cells(.Rows …
Ранее Вы предоставили  «общепринятую «

Цитата
написал:
LastRow = Cells(Rows.Count, 1).End(xlUp).Row

Какое у них отличие ?

 

MikeVol

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

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

Ученик

#17

06.11.2022 12:29:09

0mega, Думаю если вы прочтёте справку то возможно поймёте что к чему.

почему команда начинается с точки

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. Метод Range.Cut
  17. Синтаксис
  18. Параметры
  19. Метод Range.Copy
  20. Синтаксис
  21. Параметры
  22. Метод Worksheet.Paste
  23. Синтаксис
  24. Параметры
  25. Примеры
  26. 43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”
  27. VBA Excel. Буфер обмена (копирование, вставка, очистка)
  28. Копирование и вставка ячеек
  29. Буфер обмена и переменная
  30. Объект DataObject
  31. Копирование текста из переменной в буфер обмена
  32. Копирование текста из буфера обмена в переменную
  33. Очистка буфера обмена
  34. Функции для работы с буфером обмена
  35. 8 комментариев для “VBA Excel. Буфер обмена (копирование, вставка, очистка)”
  36. Метод Range.Copy (Excel)
  37. Синтаксис
  38. Параметры
  39. Возвращаемое значение
  40. Пример
  41. Поддержка и обратная связь
  42. Способы VBA работы с ячейками Excel
  43. Копировать и вставить: наиболее распространенное действие Excel
  44. Вставить данные ниже последней заполненной строки

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

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

Источник

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

Источник

Метод 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Номер строки самой нижней ячейки, которая использована на листе

lRws = ActiveSheet.Cells.SpecialCells(xlLastCell).Row

Количество срок можно определить по наличию значений в определенном столбце:

With ActiveSheet
    lRws = .Cells(.Rows.Count, "B").End(xlUp).Row
End With

Этими двумя методами можно определить последнюю ячейку, но не всегда. Если последние строки скрыты, они в подсчет не попадут.

Количество строк пользовательского диапазона:

lRws = ActiveSheet.UsedRange.Rows.Count

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

With ActiveSheet
    lRws = .UsedRange.Row + .UsedRange.Rows.Count - 1
End With

Стоит упомянуть и о «большом подводном камне» при использовании UsedRange.Row. Это касается и SpecialCells(xlLastCell).Row (а вот .End(xlUp).Row к этому нечувствителен).

Часто пользователи форматируют строки с запасом. Или на листе данные, копированные с другого диапазона. Или ниже данных скрыты строки… Учитывается весь пользовательский диапазон, все форматированные строки. Даже те строки, которые удалены, но сохранение изменений еще не произведено. И вместо 10 строк будет определено 10000 )

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

‘ ———————-

С переносом данных тоже не все однозначно. Можно Вырезать/Вставить, Копировать/Вставить. Если расположение данных разное или нужна фильтрация, лучше пользоваться массивами (обработка в памяти и выгрузка на лист результата).

0 / 0 / 0

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

Сообщений: 60

1

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

05.10.2011, 17:50. Показов 52421. Ответов 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



Макрос копирования строк n-ое количество раз ниже непустых

Markovich

Дата: Среда, 04.11.2020, 13:35 |
Сообщение № 1

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

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Здравствуйте, уважаемые форумчане! Большое вам спасибо за этот форум, за вашу открытость и готовность помочь в решении непосильных для многих любителей excel задач. Затрудняюсь сосчитать сколько почерпнул здесь полезных решений. Сразу скажу что в макросах не силен, но нужно осилить задачу. Есть таблица, в которую заносятся данные по объектам, количество заполняемых строк может быть от 50 и более 2000. В таблице данные анализируются и просчитываются множеством формул и также с использованием условного форматирования. Из-за большого количества строк с формулами таблица тормозит. Соответственно заготовка таблицы рассчитана на большое количество вводимых данных. Если вводимых данных пара десятков, то оставшаяся пара тысяч строк пересчитывается вхолостую. Хотелось бы создать макрос для копирования строк заданное количество раз для распространения формул. Подобные макросы видел, и в т.ч. очень интересный на этом форуме. Но у меня задача несколько сложнее. Нужно чтобы копировалась строка следующая после строки, в которой заполнена ячейка столбца F листа «Исходные данные» (т.е. по первой пустой ячейки столбца F). Одновременно должна копироваться та же самая строка на листе «service» (эти листы взаимосвязаны формулами). Количество копируемых строк определяет ячейка M4 «Технические сведения». Т.е. смысл в том, что изначально в заготовке 100 строк, я вношу данные и при недостатке строк с формулами макросом добавляется определенное количество строк, если не хватает строк, то еще добавляется. Количество требуемых строк изначально неизвестно. Протаскивать строки неудобно, т.к. в формулах есть массивы и есть еще другая таблица также взаимосвязанная с данной построчно. В приложенном файле пример таблицы. Буду благодарен за любую помощь в решении задачи.

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

5002093.xls
(40.0 Kb)

 

Ответить

Pelena

Дата: Среда, 04.11.2020, 22:49 |
Сообщение № 2

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.
Не уверена, что правильно поняла, особенно про второй лист. Вариант в файле.

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

8656480.xls
(49.0 Kb)


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

 

Ответить

Markovich

Дата: Четверг, 05.11.2020, 09:30 |
Сообщение № 3

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

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Pelena, большое Вам спасибо! Макрос работает как надо. Только хотелось бы уточнить, как на втором листе сделать, чтобы не была выделена после работы макроса штрих-пунктиром последняя скопированная строка (выделение не снимается). И еще хотел бы спросить, что нужно изменить в макросе, чтобы копировалась строка номер 9 на десятую (нужно для связанной таблицы). И еще каким образом можно сделать, чтобы макрос не работал (например, выдавал ошибку), если заполнено меньше 100 строк.

 

Ответить

Pelena

Дата: Четверг, 05.11.2020, 13:50 |
Сообщение № 4

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Так подойдёт?

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

3958089.xls
(52.5 Kb)


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

 

Ответить

Markovich

Дата: Четверг, 05.11.2020, 16:43 |
Сообщение № 5

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

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Pelena, да, с ограничением на количество заполненных строк правильно. Вы меня уж извините, я с самого начала как то витиевато поставил вопрос и не сразу заметил в результате… Задача: нужно копировать строку с первой пустой ячейкой столбца F (после заполненных). там в других ячейках этой строки множество формул. а в созданных макросах копируется строка с последней заполненной ячейкой столбца F. «строка для копирования» — это имелось ввиду пустая ячейка столбца F.

Сообщение отредактировал MarkovichЧетверг, 05.11.2020, 16:45

 

Ответить

Pelena

Дата: Четверг, 05.11.2020, 18:42 |
Сообщение № 6

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Ну, прибавьте единичку к номеру последней заполненной строки)

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

1163493.xls
(56.5 Kb)


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

 

Ответить

Markovich

Дата: Четверг, 05.11.2020, 19:14 |
Сообщение № 7

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

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Большое спасибо! То что надо.

 

Ответить

Markovich

Дата: Четверг, 31.12.2020, 02:27 |
Сообщение № 8

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

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Доброго времени суток, форумчане! С наступающим Новым годом! При попытке начать использование макроса, любезно написанного Pelena(ой) выявилась проблема: столбец Q на листе «service» является отражением столбца F на листе «Исходные данные», таблицы работают синхронно. Т.о. в столбце Q на листе «service» всегда присутствует формула ссылки на столбец F листа «Исходные данные» и из-за этого макрос не работает должным образом (ячейка без текста, но с формулой не считается пустой). Самостоятельно преодолеть проблему не получается. Вариантов решения в голове крутится два: либо как то определять в столбце Q последнюю ячейку с текстом и следующую строку ячейкой Q без текста (но с формулой) копировать заданное количество раз, либо определять номер строки с первой пустой ячейкой столбца F (после заполненных) листа «Исходные данные» и строку с этим номером, на листе «service» копировать заданное количество раз. Не понимаю какой из вариантов проще реализовать, но подошел бы любой из них. Подскажите, пожалуйста, способ решения.
P.S. Часть макроса с копированием строк на листе «Исходные данные» работает как надо.

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

_v.2.xls
(55.0 Kb)

Сообщение отредактировал MarkovichЧетверг, 31.12.2020, 02:28

 

Ответить

Pelena

Дата: Четверг, 31.12.2020, 09:22 |
Сообщение № 9

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте. И Вас с наступающим!
Не уверена, что правильно поняла, проверьте так

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

7970913.xls
(49.0 Kb)


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

 

Ответить

Markovich

Дата: Четверг, 31.12.2020, 11:22 |
Сообщение № 10

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

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Pelena, преогромнейшее Вам спасибо! Работает как нужно. Хотел таблицу свою в обкатку до Нового года запустить и Вы прям подарок новогодний сделали, что все получилось. Еще раз с наступающим и пусть Новый год будет лучше прежнего во всем, здоровья и всех благ Вам в Новом году!

 

Ответить

Markovich

Дата: Пятница, 01.01.2021, 08:49 |
Сообщение № 11

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

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

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


Excel 2019

С Новым годом, форумчане!!! Подскажите, пожалуйста, что нужно изменить в макросе, чтобы все также, как и в предыдущем вопросе, заданное количество раз вставлялись строки синхронно в два листа и в них копировались строки с первой пустой ячейкой столбца F листа «Исходные данные» и Q листа «service» соответственно, НО только, чтобы строки вставлялись не после последней заполненной ячейки, а выше той ячейки, в которой установлен курсор (активной), но копировались бы в них все также строки по первой пустой ячейке.

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

2996807.xls
(49.5 Kb)

 

Ответить

Markovich

Дата: Понедельник, 11.01.2021, 10:48 |
Сообщение № 12

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

Ранг: Новичок

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Pelena, не сочтите за наглость… у меня еще вопрос возник по макросу добавления строк. Можно ли сделать, чтобы макрос запускался автоматически, если в ячейке A6 (в примере) значение будет <10 и при этом отображалось сообщение типа «выполняется добавление строк». ну и ручное добавление по нажатию кнопки сохранить также хотелось бы?

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

6963307.xls
(73.5 Kb)

Сообщение отредактировал MarkovichПонедельник, 11.01.2021, 10:49

 

Ответить

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Копирование страницы в excel с сохранением формата
  • Копирование формата в ms word
  • Копирование страницы word целиком
  • Копирование условное форматирование excel в лист
  • Копирование страницы excel vba

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии