Vba excel вставить строку выше другой

Вставка диапазона со сдвигом ячеек вправо или вниз методом Insert объекта Range. Вставка и перемещение строк и столбцов из кода VBA Excel. Примеры.

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

Синтаксис

Expression.Insert(Shift, CopyOrigin)

Expression – выражение (переменная), возвращающее объект Range.

Параметры

Параметр Описание Значения
Shift Необязательный параметр. Определяет направление сдвига ячеек. Если параметр Shift опущен, направление выбирается в зависимости от формы* диапазона. xlShiftDown (-4121) – ячейки сдвигаются вниз;
xlShiftToRight (-4161) – ячейки сдвигаются вправо.
CopyOrigin Необязательный параметр. Определяет: из каких ячеек копировать формат. По умолчанию формат копируется из ячеек сверху или слева. xlFormatFromLeftOrAbove (0) – формат копируется из ячеек сверху или слева;
xlFormatFromRightOrBelow (1) – формат копируется из ячеек снизу или справа.

* Если диапазон горизонтальный или квадратный (количество строк меньше или равно количеству столбцов), ячейки сдвигаются вниз. Если диапазон вертикальный (количество строк больше количества столбцов), ячейки сдвигаются вправо.

Примеры

Простая вставка диапазона

Вставка диапазона ячеек в диапазон «F5:K9» со сдвигом исходных ячеек вправо:

Range(«F5:K9»).Insert Shift:=xlShiftToRight

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

Вставка вырезанного диапазона

Вставка диапазона, вырезанного в буфер обмена методом Range.Cut, из буфера обмена со сдвигом ячеек по умолчанию:

Range(«A1:B6»).Cut

Range(«D2»).Insert

Обратите внимание, что при использовании метода Range.Cut, точка вставки (в примере: Range("D2")) не может находится внутри вырезанного диапазона, а также в строке или столбце левой верхней ячейки вырезанного диапазона вне вырезанного диапазона (в примере: строка 1 и столбец «A»).

Вставка скопированного диапазона

Вставка диапазона, скопированного в буфер обмена методом Range.Copy, из буфера обмена со сдвигом ячеек по умолчанию:

Range(«B2:D10»).Copy

Range(«F2»).Insert

Обратите внимание, что при использовании метода Range.Copy, точка вставки (в примере: Range("F2")) не может находится внутри скопированного диапазона, но в строке или столбце левой верхней ячейки скопированного диапазона вне скопированного диапазона находится может.

Вставка и перемещение строк

Вставка одной строки на место пятой строки со сдвигом исходной строки вниз:


Вставка четырех строк на место пятой-восьмой строк со сдвигом исходных строк вниз:


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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Sub Primer1()

Dim n As Long, k As Long, s As String

‘Номер строки, над которой необходимо вставить строки

n = 8

‘Количесто вставляемых строк

k = 4

‘Указываем адрес диапазона строк

s = n & «:» & (n + k 1)

‘Вставляем строки

Rows(s).Insert

End Sub

‘или то же самое с помощью цикла

Sub Primer2()

Dim n As Long, k As Long, i As Long

n = 8

k = 4

    For i = 1 To k

        Rows(n).Insert

    Next

End Sub


Перемещение второй строки на место шестой строки:

Rows(2).Cut

Rows(6).Insert

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


Перемещение шестой строки на место второй строки:

Rows(6).Cut

Rows(2).Insert

В этом случае шестая строка окажется на месте второй строки.

Вставка и перемещение столбцов

Вставка одного столбца на место четвертого столбца со сдвигом исходного столбца вправо:


Вставка трех столбцов на место четвертого-шестого столбцов со сдвигом исходных столбцов вправо:


Перемещение третьего столбца на место седьмого столбца:

Columns(3).Cut

Columns(7).Insert

Третий столбец окажется на месте шестого столбца, так как четвертый столбец заместит вырезанный третий столбец, пятый встанет на место четвертого и т.д.


Перемещение седьмого столбца на место третьего столбца:

Columns(7).Cut

Columns(3).Insert

В этом случае седьмой столбец окажется на месте третьего столбца.


 

brunokaz

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

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

Господа.

Есть таблица. Юзер должен только заполнять данные в таблице и добавлять строки (по необходимости) макросом. Заголовок таблицы и расчет итогов защищен

1) Написал простейший макрос добавления строк
2) Чтобы сохранить стиль оформления, формата выпадающего списка, ничего не смог придумать, как прописать копирования с аналогичной таблицы и вставку в целевую таблицу
3) Чтобы итоговая сумма считалась при добавлении строк, прописал сумму через ДВССЫЛ

Теперь столкнулся с проблемой. Выше этой таблицы есть области где юзер может добавить строки сам, вручную. Если он там добавляет, то у меня смещается диапазон вставки (так как он прописан конкретно в макросе), а также нарушается и итоговое суммирование (начальная ячейка прописана в ДВССЫЛ).

Как быть? Эту таблицу можете посмотреть в примере.

Буду благодарен за помощь

 

Владимир

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

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

Пускай вставляет. Какие проблемы?
=СУММ(ДВССЫЛ(«Y6:Y»&СТРОКА()-2))

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

 

brunokaz

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

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

Владимир,Спасибо за подсказку по сумме. Что будет если сверху добавить сверху таблицы строку?

1) Вставка будет осуществляться в 6 строку, которая уже сместиться на заголовок таблицы
2) Y6 который вы прописали в ДВССЫЛ будет уже ячейка заголовка таблицы…

Понимаете?

 

Владимир

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

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

Тогда нужно через ПОИСКПОЗ привязаться к слову «рыночная».
=СУММ(ДВССЫЛ(«Y» & ПОИСКПОЗ(«рыночная»;Y1:Y100;0)+1&»:Y»&СТРОКА()-2))

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

 

Nordheim

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

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

#5

16.08.2017 11:19:15

Аналог вашего макроса!

Код
Sub Vstavka()
Rows("6:6").Insert Shift:=xlDown
Range("b7:an6").FillUp
Range("b6:an7").ClearContents
End Sub

Изменено: Nordheim16.08.2017 11:21:40

«Все гениальное просто, а все простое гениально!!!»

 

brunokaz

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

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

Владимир,принято. Благодарю. Попробую. Только у меня строк надо ставить 5000 и главное чтобы никто больше не прописал слово рыночная в этом дипазоне :)

Скажите, а по вставке строк макросом нет идей? )

 

Владимир

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

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

#7

16.08.2017 11:31:46

Цитата
brunokaz написал:
..макросом нет идей

Тут нужны Ваши пояснения, что хотите получить на выходе? Копировать нужно с листа 2 одну строку или то, что заполнено и т.д. в этом духе.

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

 

brunokaz

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

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

Nordheim,
Ваш код макроса:
1) Удаляет уже заполненные строки (если я заполнил и понял, что мне еще нужна строка)
2) Вставляет по несколько строк, при добавлении множества строк
3) в случае добавления строк выше таблицы, начнется чорти чо. Проблема не решается получается

Изменено: brunokaz16.08.2017 11:49:44

 

brunokaz

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

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

Владимир, тогда по примеру с адресами пройдусь:

1) Я заполнил таблицу, все данные в ней, и понял, что у меня есть еще 1 объект, данные по которому необходимо внести в эту таблицу. Я нажимаю кнопку — строка добавляется выше сроки заполненной мною ранее (становится первой в этой таблице). При этом, сохраняются форматирования, оформление и выпадающий список новой добавленной строки.я заполняю данные по второму объекту.
2) В процессе работы, я добавляю несколько строк выше таблицы. и вспоминаю, что мне нужно внести данные по третьему объекту. Тут то и возникает проблема с моим макросом: в нем прописаны конкретные диапазоны: вставок номера строк и пр…Но нумерация строк таблицы сместится же на количество добавленных выше таблицы строк. Вот этого и надо избежать, как бы привязать макрос строго к этой таблице, вне зависимости от добавленных/удаленных строк выше самой таблицы.

Как-то так. Эта таблица большого заключения, под которой и над которой будет вестись работа по заполнению данных…

Изменено: brunokaz16.08.2017 11:51:17

 

Nordheim

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

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

#10

16.08.2017 11:49:45

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

Код
Sub Vstavka()
Rows("6:6").Insert Shift:=xlDown
Range("b7:an6").FillUp
Range("b6:an6").ClearContents
End 

Subbrunokaz написал: 2) Вставляет по несколько строк

всегда вставляет только 1 строку

brunokaz написал: 3) в случае добавления строк выше таблицы, начнется чорти чо. Проблема не решается получается

Как может макрос вставит строку выше таблицы? Вы планируете смещать таблицу?

Изменено: Nordheim16.08.2017 11:51:30

«Все гениальное просто, а все простое гениально!!!»

 

Владимир

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

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

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

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

 

brunokaz

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

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

#12

16.08.2017 11:54:56

Nordheim, Мы привязаны к строке 6. Если я добавлю строку выше таблицы, это же станет строкой заголовка и начнуться проблемы

Код
Rows("6:6").Insert Shift:=xlDown 

Изменено: brunokaz16.08.2017 11:55:25

 

Nordheim

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

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

#13

16.08.2017 12:02:54

Я не пойму как вы добавите строку выше таблицы, в коде зашита вставка в 6 строку, и дальнейшее форматирование конкретно 6 сроки.

Код
Sub Vstavka()
' втавляем пустую строку в строку №6
Rows("6:6").Insert Shift:=xlDown
' Копируем данные и формат с 7 строки
Range("b7:an6").FillUp
' очищаем 6 строку
Range("b6:an6").ClearContents
End

Вроде код примитивный до невозможности и все понятно.

«Все гениальное просто, а все простое гениально!!!»

 

Nordheim

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

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

#14

16.08.2017 12:03:54

Цитата
brunokaz написал:
Если я добавлю строку выше таблицы

Каким образом?

«Все гениальное просто, а все простое гениально!!!»

 

brunokaz

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

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

Nordheim, в моем примере выделите строку два и вручную добавьте строку, а потом добавьте строку в таблицу при помощи написанного Вами макроса.

Получится так, что строка 6 (Rows(«6:6»).Insert Shift:=xlDown) это уже строка заголовка таблицы …..

Код простой, может я не верно объясняю, за что и извиняюсь, если это так.

Изменено: brunokaz16.08.2017 12:18:40

 

Nordheim

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

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

#16

16.08.2017 12:27:19

Цитата
Nordheim написал:
brunokaz написал: 3) в случае добавления строк выше таблицы, начнется чорти чо. Проблема не решается получаетсяКак может макрос вставит строку выше таблицы? Вы планируете смещать таблицу?

Я и спросил разве таблица будет смещаться?
Мой макрос повторяет с точностью ваш, разница в том , что не нужно ничего ниоткуда копировать вот собственно и все.

Цитата
brunokaz написал:
Nordheim , в моем примере выделите строку два и вручную добавьте строку, а потом добавьте строку в таблицу при помощи написанного Вами макроса.

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

«Все гениальное просто, а все простое гениально!!!»

 

brunokaz

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

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

#17

16.08.2017 12:39:57

Цитата
Nordheim написал:
Я и спросил разве таблица будет смещаться?

Не понял фразу сначала по смещению….

Цитата
Nordheim написал:
Мой макрос повторяет с точностью ваш, разница в том , что не нужно ничего ниоткуда копировать вот собственно и все.

Согласен

Цитата
Nordheim написал:
Я одного не пойму зачем пользователь вставит строки вручную если на листе кнопка вставки строк присутствует?

Этот лист состоит из десятков таблиц. Таблицы и их форму изменять нельзя — это утвержденная форма заключения, но в некоторых местах строки добавлять можно (например под таблицами), с целью отражения комментариев к изложенным в таблицах данным и изложением доп инфы по данным из таблицы.

Изменено: brunokaz16.08.2017 12:40:19

 

Владимир

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

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

Попробуйте добавить строки выше табличной формы..

Изменено: Владимир16.08.2017 13:54:52

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

 

brunokaz

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

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

#19

16.08.2017 15:09:04

Цитата
Владимир написал:
Попробуйте добавить строки выше табличной формы..

Лист защищен….

 

brunokaz

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

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

Если эту проблему не решить или трудно решаема, прошу подтвердить кто может. Тогда я буду думать что делать…

 

Nordheim

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

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

#21

17.08.2017 08:39:47

Код
Sub Vstavka()
ActiveSheet.Unprotect "12345"
Rows(6).Insert
Rows("7:6").FillUp
Rows(6).ClearContents
ActiveSheet.Protect "12345", DrawingObjects:=False, Contents:=True, Scenarios:= _
        False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowInsertingColumns:=True, _
        AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
        AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
        AllowUsingPivotTables:=True
End Sub

«Все гениальное просто, а все простое гениально!!!»

 

brunokaz

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

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

Nordheim, к сожалению это не решает вопрос с возможным смещением таблицы. Если только весь лист не защищать по вставке строк, что я не могу сделать

Изменено: brunokaz17.08.2017 09:16:32

 

Nordheim

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

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

#23

17.08.2017 09:22:28

Цитата
brunokaz написал:
к сожалению это не решает вопрос с возможным смещением таблицы

Почему же?, Строки вставляются благополучно макросом. Пользователь вставить строки не может. как в таком случае сместится таблица?

«Все гениальное просто, а все простое гениально!!!»

 

brunokaz

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

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

Nordheim, ладно…придется запрещать пользователям вставлять строки. Спасибо Вам за помощь

 

Nordheim

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

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

Попробуйте сделать обходной вариант. Вставление строк в любое место кроме шапки таблицы, с использованием InputBox.

«Все гениальное просто, а все простое гениально!!!»

 

brunokaz

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

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

 

Kcuxa_xa

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

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

Подскажите, а что нужно поменять в макросе, что бы он добавлял новую строку не в начало таблицы, а в конец?

Изменено: Kcuxa_xa07.01.2019 22:26:50

 

Nordheim

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

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

Kcuxa_xa, А в чем смысл? Вам нужно вставить пустую строку перед последней заполненной в таблице?

«Все гениальное просто, а все простое гениально!!!»

 

Kcuxa_xa

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

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

#29

07.01.2019 23:16:38

Цитата
Nordheim написал:
А в чем смысл?

да Вы правы это в принципе не критично. А не подскажите как в таком случае сделать, что бы новая строка автоматом нумеровалась по порядку?

 

Nordheim

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

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

#30

07.01.2019 23:29:58

Файл пример покажите.
Можно так

Код
Sub test()
    Dim lrow&
    lrow = Range("a" & Rows.Count).End(xlUp).Row
    If lrow = 1 Then Exit Sub
    Range("a" & lrow + 1).Value = Range("a" & lrow).Value + 1
End Sub

Изменено: Nordheim07.01.2019 23:34:39

«Все гениальное просто, а все простое гениально!!!»

0 / 0 / 0

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

Сообщений: 4

1

Макросы вставки строки сверху/снизу…

10.09.2011, 16:07. Показов 89125. Ответов 11


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

Здравствуйте!

Прошу вас помочь, сам я точно не справлюсь!!

В таблице, скажем, из 4-х столбцов (A,B,C,D) необходимо добавить строку сверху. При этом по столбцу A происходит автоматическая пере-нумерация. По столбцу D считается произведение B и C.

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

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

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



0



Programming

Эксперт

94731 / 64177 / 26122

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

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

10.09.2011, 16:07

11

toiai

3217 / 966 / 223

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

Сообщений: 2,085

10.09.2011, 18:31

2

Удаление строки предполагает текущую строку, зачем заморочка сверху снизу, если можно сместить курсор вверх или вниз и удалить, тоже самое со ставкой…

Вставить строку сверху можно так:

Visual Basic
1
Rows("11:11").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Добавлено через 6 минут
Удалить строку

Visual Basic
1
Rows(11).Delete

Добавлено через 8 минут
Вставить строку снизу:

Visual Basic
1
Rows("11:11").Insert Shift:=xlUp, CopyOrigin:=xlFormatFromLeftOrAbove



1



Frank Nilson

0 / 0 / 0

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

Сообщений: 4

10.09.2011, 21:15

 [ТС]

3

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

Удаление строки предполагает текущую строку, зачем заморочка сверху снизу, если можно сместить курсор вверх или вниз и удалить, тоже самое со ставкой…

Toiai, спасибо! Так действительно проще.

А каким образом прописать автоматический подсчет формулы в столбце D и автоматическую нумерацию в столбце А при добавлении строки сверху/снизу? В этом вся загвоздка…

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

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

Вставить строку снизу:

Visual Basic
1
Rows("11:11").Insert Shift:=xlUp, CopyOrigin:=xlFormatFromLeftOrAbove

В этом случае вставляет снизу строки 11. А мне нужно было вставить строку снизу самой последней строки таблицы, поэтому я использовал для удаления и вставки ту заморочку=))



0



toiai

3217 / 966 / 223

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

Сообщений: 2,085

10.09.2011, 22:54

4

Вместо 11 строки применить значение последней строки. Поскольку последняя строка итоговая, предлагаю вставлять строку сверху, при этом автоматически и формат вставится. По поводу нумерации, перед вставкой считать значение ячейки с предитоговой строки

Visual Basic
1
номер=Cells(nRow-1,1)

По формуле:

Visual Basic
1
Cells(nRow,4).FormulaR1C1 = "=RC[-2]*RC[-1]"

Добавлено через 10 минут
Все-таки надо вставлять строку с предпоследней строки снизу (т.е. использовать xlUp), при этом автоматически расширится диапазон подсчета в итоговой строке.



1



0 / 0 / 0

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

Сообщений: 4

10.09.2011, 23:42

 [ТС]

5

toiai, логику понимаю, но я не могу написать сам макрос, поскольку никогда не программировал. Вы не мог ли бы показать пример одного макроса на добавление строки сверху с автоматической нумерацией и формулой по той таблице? Буду очень благодарен!



0



3217 / 966 / 223

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

Сообщений: 2,085

11.09.2011, 10:38

6

Вот примерно так.



1



730 / 406 / 95

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

Сообщений: 756

11.09.2011, 12:32

7

Вариант вставки строки сверху.



1



0 / 0 / 0

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

Сообщений: 4

11.09.2011, 12:51

 [ТС]

8

Друзья! Спасибо огромное! Очень выручили!!



0



syserr

14.05.2013, 08:43

9

в продолжении темы прошу помощи в решении аналогичного вопроса применительно к моему файлу xls.
Требуется:
1. Автоматическая нумерация строк в первом столбце при их добавлении по кнопке
2. Добавление новой строки по кнопке сразу после шапки с заголовками A9
3. При добавлении новой строки должна добавляться формула в столбцы G и H путем умножения на переменную n столбцов E и F
4. Подсчет итого реализован формулой суммы, но при удалении всех ячеек она не подсчитывает итог

Заранее благодарствую.

0 / 0 / 0

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

Сообщений: 7

26.06.2013, 12:18

10

Ребят, чтобы не создавать отдельную тему, подскажите:

Есть столбец с данными А1:

необходимо добавить 2 пустые строки после каждой заполненной строки

То есть по клику по кнопке, запускается макрос, добавляющий пустые 2 строки после строки А1 (не менее 800 вниз)



0



Аксима

6076 / 1320 / 195

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

Сообщений: 1,023

26.06.2013, 12:37

11

Здравствуйте, @koskokoss,

Вот примерное решение:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub MakeSpace()
 
    Const Îáðàáîòàòü_ñòðîê_ìèíèìóì = 800
    Const Âñòàâèòü_ñòðîê_ïîñëå_çàïîëíåííîé = 2
    
    Dim i As Long, j As Long, cell As Range
    
    Application.ScreenUpdating = False
    For i = Îáðàáîòàòü_ñòðîê_ìèíèìóì To 3 Step -1
        Set cell = Cells(i, 1)
        If Not IsEmpty(cell) Then
            For j = 1 To Âñòàâèòü_ñòðîê_ïîñëå_çàïîëíåííîé
                cell.Insert Shift:=xlDown
            Next j
        End If
    Next i
    Application.ScreenUpdating = True
 
End Sub

С уважением,

Aksima



1



0 / 0 / 0

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

Сообщений: 7

26.06.2013, 13:32

12

Спасибо, то что нужно, только вставляет после второй строки(



0



Макрос вставки n строк выше активной ячейки и копирование

Markovich

Дата: Понедельник, 04.01.2021, 11:51 |
Сообщение № 1

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

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

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Здравствуйте, уважаемые форумчане! Есть макрос из Макрос копирования строк n-ое количество раз ниже непустых, любезно написанный Pelena(ой). Отличный макрос, полностью выполняющий свою задачу. Но есть еще задача, которую, если возможно, хотелось бы решить на базе данного макроса. Задача в следующем: 1) нужно вставить строки в количестве, указанном в ячейке A2 листа «Данные», выше активной ячейки (т.е. в какой установлен курсор) и копировать в эти строки строку с первой пустой ячейкой столбца F (после заполненных) листа «Данные»; 2) синхронно на листе «service» в те же номера строк, что и на листе «Данные» вставить диапазон ячеек столбцов B-F с количеством по строкам из ячейки A2 листа «Данные» со сдвигом вниз и копированием в них соответственно из ячеек B-F строки с первой пустой ячейкой столбца D (после заполненных) листа «service». Подскажите пожалуйста, как можно реализовать, данную задачу

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

9589711.xls
(41.5 Kb)

 

Ответить

Pelena

Дата: Понедельник, 04.01.2021, 13:22 |
Сообщение № 2

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.
Так? Проверку на корректность местоположения выделенной ячейки не делала

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

7823871.xls
(37.5 Kb)


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

 

Ответить

Markovich

Дата: Понедельник, 04.01.2021, 16:51 |
Сообщение № 3

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

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

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Pelena, Вы как всегда на уровне, большое Вам спасибо! Единственное уточнение, можно ли на листе «service», вставлять и копировать не строки, а ячейки со сдвигом вниз от столбца B до столбца F? Просто с боку будут другие данные, которые не хотелось бы сдвигать. Если это непросто реализовать, то и ладно, так как есть тоже здорово.

 

Ответить

Pelena

Дата: Понедельник, 04.01.2021, 17:35 |
Сообщение № 4

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Так?

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

2763624.xls
(44.5 Kb)


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

 

Ответить

Markovich

Дата: Понедельник, 04.01.2021, 18:02 |
Сообщение № 5

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

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

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Круто! То что надо. Еще раз большое спасибо.

 

Ответить

Markovich

Дата: Четверг, 07.01.2021, 11:16 |
Сообщение № 6

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

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

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Pelena, а возможно в макросе сделать следующую доработку: если курсор находится в диапазоне строк 1-10, то выполнение макроса останавливается и выдается сообщение типа «Проверь положение курсора». А то иногда на автомате нажимается на кнопку вставки строк когда курсор в недопустимом месте. И еще возможно такое, что сколько ячеек выделено по вертикали, то столько строк и вставляется выше выделенных ячеек (приоритет по количеству добавляемых строк у выделенных ячеек перед заданным числом в ячейке).
P.S. Вот только не совсем понимаю корректно ли в продолжении данной темы задавать вопросы по доработке макроса или нужно новую тему создавать?

Сообщение отредактировал MarkovichЧетверг, 07.01.2021, 11:38

 

Ответить

Pelena

Дата: Четверг, 07.01.2021, 12:01 |
Сообщение № 7

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

То есть мы на ячейку А2 вообще не смотрим?


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

 

Ответить

Markovich

Дата: Четверг, 07.01.2021, 19:39 |
Сообщение № 8

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

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

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Хороший вопрос. %) Прокрутил в голове алгоритм работы и пришел к выводу, что наиболее рациональным и визуально удобным будет сделать еще одну кнопку и назвать ее, например, «вставка строк по выделению» (или как то так). Ну и остановка выполнения макроса с сообщением о том, что курсор в диапазоне 1-10 строк находится тоже нужно.

 

Ответить

Pelena

Дата: Пятница, 08.01.2021, 15:47 |
Сообщение № 9

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Как-то так

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

5409986.xls
(44.0 Kb)


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

 

Ответить

Markovich

Дата: Пятница, 08.01.2021, 16:53 |
Сообщение № 10

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

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

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Круто! Совершенству нет предела. Pelena, огромное Вам спасибо, работает как и задумывалось!

 

Ответить

Markovich

Дата: Суббота, 09.01.2021, 09:44 |
Сообщение № 11

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

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

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Pelena, а подскажите, пожалуйста, как сделать, чтобы в целевые строки копирование производилось всегда из первой строки? Т.е. использовать первую строку как эталон/заготовку.

 

Ответить

Pelena

Дата: Суббота, 09.01.2021, 14:31 |
Сообщение № 12

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Пример будет?


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

 

Ответить

Markovich

Дата: Суббота, 09.01.2021, 16:45 |
Сообщение № 13

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

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

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Прошу прощения, забыл приложить пример. В примере на листе «Данные» первая строка будет являться шаблоном и ее нужно копировать во вставленные заданное (по ячейке A2 и по выделению) количество строки, а листе «service» все тоже самое, только не строка, а диапазон ячеек B1:F1 будет являться шаблоном, который нужно скопировать во вставленные ячейки

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

____.xls
(40.5 Kb)

 

Ответить

Pelena

Дата: Суббота, 09.01.2021, 22:12 |
Сообщение № 14

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Так?

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

9649251.xls
(45.0 Kb)


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

 

Ответить

Markovich

Дата: Суббота, 09.01.2021, 22:35 |
Сообщение № 15

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

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

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Здорово! так и задумывалось. спасибо большое!

 

Ответить

Markovich

Дата: Воскресенье, 10.01.2021, 08:35 |
Сообщение № 16

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

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

Сообщений: 48


Репутация:

0

±

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


Excel 2019

Pelena, подскажите, пожалуйста, как вместо копирования первой строки, копировать строку с именем «forma» (в примере строка 20). пытаюсь написать вместо [vba][/vba], [vba][/vba], выдается ошибка. Видимо что то в синтаксисе, в инете не получилось найти решения, натыкаюсь только на то что строки не могут быть буквами. Пробовал понять с помощью макрорекордера, название строки получается вроде бы в виде «forma». Вы уж извините, что столько вопросов вокруг одного и того же, все пытаюсь «Каменный цветок» создать, но не выходит. Хочется куда то деть форму для заполнения строк на листе «Данные» (которую копирую). С копированием из первой строки не очень удачно получилось, все работает как надо, только вот я эту строку сделал скрытой, в итоге макрос ее и копирует скрытой. Может быть корректнее будет, скопированные строки показывать? Тогда не понимаю как сделать проще и в каком случае код будет выполняться быстрее.

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

2664273.xls
(53.0 Kb)

 

Ответить

RAN

Дата: Воскресенье, 10.01.2021, 10:42 |
Сообщение № 17

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

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

Сообщений: 5645

[vba][/vba]


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

 

Ответить

Pelena

Дата: Воскресенье, 10.01.2021, 11:16 |
Сообщение № 18

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Хочется куда то деть форму для заполнения строк

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


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

 

Ответить

Markovich

Дата: Воскресенье, 10.01.2021, 12:06 |
Сообщение № 19

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

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

Сообщений: 48


Репутация:

0

±

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


Excel 2019

RAN, Pelena, спасибо за помощь. Как все это интересно и как мало знаний. Эх, говорила мне мама, иди на ПММ учиться…

 

Ответить

doc-insert-row-based-on-value-1

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

Вставьте строку выше на основе значения ячейки с помощью Kutools for Excel хорошая идея3


Чтобы вставить строку на основе значения ячейки, запустив VBA, выполните следующие действия:

1. Нажмите Alt + F11 одновременно, а Microsoft Visual Basic для приложений окно выскакивает.

2. Нажмите Вставить > Модули, затем вставьте ниже код VBA во всплывающий Модули окно.

VBA: вставьте строку ниже на основе значения ячейки.

Sub BlankLine()
	'Updateby20150203
	Dim Rng As Range
	Dim WorkRng As Range
	On Error Resume Next
	xTitleId                   = "KutoolsforExcel"
	Set WorkRng                = Application.Selection
	Set WorkRng                = Application.InputBox("Range", xTitleId, WorkRng.Address, Type: = 8)
	Set WorkRng                = WorkRng.Columns(1)
	xLastRow                   = WorkRng.Rows.Count
	Application.ScreenUpdating = False
	For xRowIndex = xLastRow To 1 Step - 1
		Set Rng                   = WorkRng.Range("A" & xRowIndex)
		If Rng.Value = "0" Then
			Rng.Offset(1, 0).EntireRow.Insert Shift: = xlDown
		End If
	Next
	Application.ScreenUpdating = True
End Sub

3. Нажмите F5 ключа или Run нажмите кнопку, появится диалоговое окно и выберите столбец, содержащий ноль. Смотрите скриншот:
doc-insert-row-based-on-value-2

4. Нажмите OK. Тогда пустые строки будут вставлены ниже нулевого значения.
doc-insert-row-based-on-value-3

Функции:

1. Если вы хотите вставить строки на основе другого значения, вы можете изменить 0 на любое значение, которое вы хотите в VBA: Если Rng.Value = «0», то.

2. Если вы хотите вставить строки выше нуля или другого значения, вы можете использовать приведенный ниже код vba.

VBA: вставить строку выше нулевого значения:

Sub BlankLine()
	'Updateby20150203
	Dim Rng As Range
	Dim WorkRng As Range
	On Error Resume Next
	xTitleId                   = "KutoolsforExcel"
	Set WorkRng                = Application.Selection
	Set WorkRng                = Application.InputBox("Range", xTitleId, WorkRng.Address, Type: = 8)
	Set WorkRng                = WorkRng.Columns(1)
	xLastRow                   = WorkRng.Rows.Count
	Application.ScreenUpdating = False
	For xRowIndex = xLastRow To 1 Step - 1
		Set Rng                   = WorkRng.Range("A" & xRowIndex)
		If Rng.Value = "0" Then
			Rng.EntireRow.Insert Shift: = xlDown
		End If
	Next
	Application.ScreenUpdating = True
End Sub

doc-insert-row-based-on-value-4


Если вы не знакомы с VBA, вы можете попробовать Kutools for Excel‘s Выбрать определенные ячейки утилита, а затем вставьте строки выше.

После установки Kutools for Excel, пожалуйста, сделайте следующее:(Бесплатная загрузка Kutools for Excel Сейчас!)

1. Выберите список, из которого вы хотите найти определенные ячейки, и нажмите Кутулс > Выберите > Выбрать определенные ячейки. Смотрите скриншот:
doc вставить строку на основе значения 9

2. В появившемся диалоговом окне отметьте Весь ряд вариант, а затем перейдите, чтобы выбрать Равно от Конкретный тип список, а затем введите значение, которое вы хотите найти, в правом текстовом поле. Смотрите скриншот:
doc вставить строку на основе значения 6

3. Нажмите Ok, и появится диалоговое окно, напоминающее количество выбранных строк, просто закройте его.

4. Поместите курсор в одну выбранную строку и щелкните правой кнопкой мыши, чтобы выбрать Вставить из контекстного меню. Смотрите скриншот:
doc вставить строку на основе значения 7

Теперь строки вставляются выше на основе определенного значения.
doc вставить строку на основе значения 8


Относительные статьи:

  • Вставить пустые строки в Excel

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (43)


Оценок пока нет. Оцените первым!

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