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

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


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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
   Next i
                 Dim v As Integer
                 Dim pro As Range
                For i = 1 To UBound(part)
                        Set NAH = Range("B57:B6000").Find(what:=part(i).ima, LookAt:=xlWhole)
                        If bp <> 0 Then
                            For v = 1 To bp
                            Set pro = part(i).komplekt.belok(v)
                            Range(Cells(pro.Row, pro.Column + 1), Cells(pro.Row, pro.Column + 3)).Copy
                            Cells(NAH.Row + 1, 4).PasteSpecial Paste:=xlPasteValues
                            Next v
                        End If
                Next i:

Операция Cells(NAH.Row + 1, 4).PasteSpecial Paste:=xlPasteValues вставляет данные в строку,
затирая данные на строке NAH.Row + 1

А мне надо чтобы при вставке остальные строки сохранялись , но сдвигались бы вниз.К примеру операция хочет записать данные в строку 60 , но в ней есть данные, поэтому строка 60 сдвигается вниз и ее номер становится 61, а на место 60 освободившейся строки оператор вставляет данные

First up, how do you find your ListObject? I generally use this syntax :

Range("Table1").ListObject 

The Range(«Table1») bit allows me to find the ListObject even if I don’t know what sheet it’s on. This works because Tables are also Named Ranges that you can address by name. So you just say «Go to the Named Range called Table1, and get me the ListObject that lives there». Otherwise you would need to know in advance what sheet the ListObject is on, and use the following:

Worksheets("SomeSheet").Listobjects("Table1")

…which works just fine until one day you move the Table to a different sheet, and forget to update your code.

Next, how to add rows? To add a single listrow, just use:

 Range("Table1").ListObject.ListRows.Add X

…where X is the ListRow number you want it to be added in above. Put 1 for the top, 2 for the second, and so on. Leave it blank and your ListRow gets added to the bottom.

But that only lets you add 1 ListRow at a time. So you’ve got three choices:

  1. Create a loop, do it 15 times
  2. Simply resize the ListObject so that 15 rows get added to the end
  3. Just insert entire sheet rows at the position you want the new ListRows, using something like this:

    Rows(«16:30»).Insert Shift:=xlDown

Формулировка задачи:

Операция Cells(NAH.Row + 1, 4).PasteSpecial Paste:=xlPasteValues вставляет данные в строку, затирая данные на строке NAH.Row + 1 А мне надо чтобы при вставке остальные строки сохранялись , но сдвигались бы вниз.К примеру операция хочет записать данные в строку 60 , но в ней есть данные, поэтому строка 60 сдвигается вниз и ее номер становится 61, а на место 60 освободившейся строки оператор вставляет данные

Код к задаче: «Вставка строки со сдвигом вниз»

textual

    Cells(NAH.Row + 1, 4).Insert Shift:=xlDown
'после цикла
    Application.CutCopyMode = False

Полезно ли:

7   голосов , оценка 4.429 из 5

ГЛАВНАЯ

ТРЕНИНГИ

   Быстрый старт
   Расширенный Excel
   Мастер Формул
   Прогнозирование
   Визуализация
   Макросы на VBA

КНИГИ

   Готовые решения
   Мастер Формул
   Скульптор данных

ВИДЕОУРОКИ

ПРИЕМЫ

   Бизнес-анализ
   Выпадающие списки
   Даты и время
   Диаграммы
   Диапазоны
   Дубликаты
   Защита данных
   Интернет, email
   Книги, листы
   Макросы
   Сводные таблицы
   Текст
   Форматирование
   Функции
   Всякое
PLEX

   Коротко
   Подробно
   Версии
   Вопрос-Ответ
   Скачать
   Купить

ПРОЕКТЫ

ОНЛАЙН-КУРСЫ

ФОРУМ

   Excel
   Работа
   PLEX

© Николай Павлов, Planetaexcel, 2006-2022
info@planetaexcel.ru


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

Техническая поддержка сайта

ООО «Планета Эксел»

ИНН 7735603520


ОГРН 1147746834949
        ИП Павлов Николай Владимирович
        ИНН 633015842586
        ОГРНИП 310633031600071 

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