Вставка диапазона со сдвигом ячеек вправо или вниз методом 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 |
В этом случае седьмой столбец окажется на месте третьего столбца.
Home / VBA / VBA Insert Column (Single and Multiple)
In this tutorial, we will look at how to insert a column using a VBA code in Excel. We will also explore what are the different ways to write a macro for this.
To insert a column using a VBA code, you need to use the “Entire Column” property with the “Insert” method. With the entire column property, you can refer to the entire column using a cell and then insert a new column. By default, it will insert a column before the cell that you have mentioned.
- First, specify a cell using the range object.
- Now, enter a dot (.) to get the list of properties and methods.
- After that, select the “Entire Column” property or type it.
- In the end, again enter a dot (.) and select the “Insert” method or type it.
Range("A1").EntireColumn.Insert
Your code is ready here to insert a column. Now when you run this code, it will instantly insert a new column before the column A.
Insert Multiple Columns
There are two ways to insert multiple columns in a worksheet that I have found. The first is the same insert method that we have used in the above example. With this, you need to specify a range of columns whose count is equal to the count of the column you want to insert.
Now let’s say you want to insert 5 columns after column C in the case you can use a code like the following.
Range("C:G").EntireColumn.Insert
To be honest, I haven’t found this method quite useful because you need to change the range if you want to change the code itself. So, here’s the second method.
'variables to use in the code
Dim iCol As Long
Dim iCount As Long
Dim i As Long
'to get the number of columns that you want to insert with an input box
iCount = InputBox(Prompt:="How many column you want to add?")
'to get the column number where you want to insert the new column
iCol = InputBox _
(Prompt:= _
"After which column you want to add new column? (Enter the column number)")
'loop to insert new column(s)
For i = 1 To iCount
Columns(iCol).EntireColumn.Insert
Next i
When you run this code, it asks you to enter the number of columns that you want to add and then the column number where you want to add all those new columns. It uses a FOR LOOP (For Next) to enter the number of columns that you have mentioned.
Insert Columns Based on the Cell Values
If you want to insert columns based on a cell value, then you can use the following code.
Dim iCol As Long
Dim iCount As Long
Dim i As Long
iCount = Range("A1").Value
iCol = Range("B1").Value
For i = 1 To iCount
Columns(iCol).EntireColumn.Insert
Next i
When you run this macro, it takes count of columns from the cell A1 and the column where you want to add columns from the cell B1.
Insert a Column without Formatting
When you insert a column where the above column has some specific formatting, in that case, the column will also have that formatting automatically. And the simplest way to deal with this thing is to use clear formats. Consider the following code.
Columns(7).EntireColumn.Insert
Columns(7).ClearFormats
When you run the above code, it inserts a new column before the 7th column. Now, what happens, when you insert a column before the 7th column that new column becomes the 7th column, and then the second line of code clear the formats from it.
Insert Copied Column
You can also use the same method to copy a column and then insert it somewhere else. See the following code.
Application.CutCopyMode = False
With Worksheets("Data")
.Columns(5).Copy
.Columns(9).Insert Shift:=xlShiftDown
End With
Application.CutCopyMode = True
More Tutorials
- Count Rows using VBA in Excel
- Excel VBA Font (Color, Size, Type, and Bold)
- Excel VBA Hide and Unhide a Column or a Row
- Excel VBA Range – Working with Range and Cells in VBA
- Apply Borders on a Cell using VBA in Excel
- Find Last Row, Column, and Cell using VBA in Excel
- Insert a Row using VBA in Excel
- Merge Cells in Excel using a VBA Code
- Select a Range/Cell using VBA in Excel
- SELECT ALL the Cells in a Worksheet using a VBA Code
- ActiveCell in VBA in Excel
- Special Cells Method in VBA in Excel
- UsedRange Property in VBA in Excel
- VBA AutoFit (Rows, Column, or the Entire Worksheet)
- VBA ClearContents (from a Cell, Range, or Entire Worksheet)
- VBA Copy Range to Another Sheet + Workbook
- VBA Enter Value in a Cell (Set, Get and Change)
- VBA Named Range | (Static + from Selection + Dynamic)
- VBA Range Offset
- VBA Sort Range | (Descending, Multiple Columns, Sort Orientation
- VBA Wrap Text (Cell, Range, and Entire Worksheet)
- VBA Check IF a Cell is Empty + Multiple Cells
⇠ Back to What is VBA in Excel
Helpful Links – Developer Tab – Visual Basic Editor – Run a Macro – Personal Macro Workbook – Excel Macro Recorder – VBA Interview Questions – VBA Codes
In this Article
- Insert a Single Row or Column
- Insert New Row
- Insert New Column
- Insert Multiple Rows or Columns
- Insert Multiple Rows
- Insert Multiple Columns
- Insert – Shift & CopyOrigin
- Other Insert Examples
- Insert Copied Rows or Columns
- Insert Rows Based on Cell Value
- Delete Rows or Columns
This tutorial will demonstrate how to use VBA to insert rows and columns in Excel.
To insert rows or columns we will use the Insert Method.
Insert a Single Row or Column
Insert New Row
To insert a single row, you can use the Rows Object:
Rows(4).Insert
Or you can use the Range Object along with EntireRow:
Range("b4").EntireRow.Insert
Insert New Column
Similar to inserting rows, we can use the Columns Object to insert a column:
Columns(4).Insert
Or the Range Object, along with EntireColumn:
Range("b4").EntireColumn.Insert
Insert Multiple Rows or Columns
Insert Multiple Rows
When inserting multiple rows with the Rows Object, you must enter the rows in quotations:
Rows("4:6").Insert
Inserting multiple rows with the Range Object works the same as with a single row:
Range("b4:b6").EntireRow.Insert
Insert Multiple Columns
When inserting multiple columns with the Columns Object, enter the column letters in quotations:
Columns("B:D").Insert
Inserting multiple columns with the Range Object works the same as with a single column:
Range("b4:d4").EntireColumn.Insert
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!
Learn More
Insert – Shift & CopyOrigin
The Insert Method has two optional arguments:
- Shift – Which direction to shift the cells
- CopyOrigin – Which cell formatting to copy (above, below, left, or right)
The Shift argument is irrelevant when inserting entire rows or columns. It only allows you to indicate to shift down or shift to the right:
- xlShiftDown – Shift cells down
- xlShiftToRight – Shift cells to the right
As you can see, you can’t shift up or to the left.
The CopyOrigin argument has two potential inputs:
- xlFormatFromLeftorAbove – (0) Newly-inserted cells take formatting from cells above or to the left
- xlFormatFromRightorBelow (1) Newly-inserted cells take formatting from cells below or to the right.
Let’s look at some examples of the CopyOrigin argument. Here’s our initial data:
This example will insert a row, taking the formatting from the above row.
Rows(5).Insert , xlFormatFromLeftOrAbove
This example will insert a row, taking the formatting from the below row.
Rows(5).Insert , xlFormatFromRightOrBelow
Other Insert Examples
Insert Copied Rows or Columns
If you’d like to insert a copied row, you would use code like this:
Range("1:1").Copy
Range("5:5").Insert
Here we copy Row 1 and Insert it at Row 5.
VBA Programming | Code Generator does work for you!
Insert Rows Based on Cell Value
This will loop through a range, inserting rows based on cell values:
Sub InsertRowswithSpecificValue()
Dim cell As Range
For Each cell In Range("b2:b20")
If cell.Value = "insert" Then
cell.Offset(1).EntireRow.Insert
End If
Next cell
End Sub
Delete Rows or Columns
To delete rows or columns, simply use the Delete method.
Rows(1).Delete
Range("a1").EntireRow.Delete
Columns(1).Delete
Range("a1").EntireColumn.Delete
I know the thread is old, but I must point out that the most upvoted answer here is risky and can get you in a serious trouble. I don’t know if it depends Excel version — I use Excel’16.
Let’s consider table containing columns: col A, col B and col C.
We use «The Dudes» one-liner code and want to name our new column «Col B». It already exists but check what happens:
Sub theDude()
Dim Table As ListObject
Set Table = ActiveSheet.ListObjects(1)
With Table
' adding column on the second place
' and trying to force its header to "Col B"
.ListColumns.Add(2).Name = "Col B"
'fill "Col B" with value
.ListColumns("Col B").DataBodyRange = "test"
End With
End Sub
And what we get? In result we have 4 columns:
- Col A
- New inserted Column1 or another DEFAULT NAME of Table’s column (1)
- Col B — the «old» B column filled with «test» string
- Col C
(1) it depends on yours language version- mine is called Kolumna1 and it’s given by Excel automatically
The worst thing is our data in Col B is lost after macro run. So I would suggest instead one-liner (methods chaining) use @stenci’s step by step solution, or even better add some error handling e.g.:
Sub AddingColumn()
Dim Table As ListObject
' ActiveSheet just for test
Set Table = ActiveSheet.ListObjects(1)
Dim newColName As Variant ' or string / long
newColName = "Col B"
If headerExists(newColName, Table) Then
Dim tit As String: tit = "Error"
Dim txt As String
txt = "Header " & newColName & " already exists. Macro will be interrupted"
MsgBox txt, vbOKOnly, tit
Exit Sub
Else
' main code goes here *********************
With Table
' adding column on the second place
' and trying to force its header to "Col B"
.ListColumns.Add(2).Name = newColName
'fill "Col B" with value
.ListColumns("Col B").DataBodyRange = "test"
End With
End If
End Sub
Function headerExists(ByVal findHeader As String, ByVal tbl As ListObject) As Boolean
Dim pos As Variant ' position
pos = Application.Match(findHeader, tbl.HeaderRowRange, 0)
headerExists = Not IsError(pos)
End Function
- Excel VBA Вставить столбец
Excel VBA Вставить столбец
В Excel, если мы хотим вставить столбец, есть несколько способов сделать это. Мы можем щелкнуть вправо и выбрать «Вставить столбец» в раскрывающемся списке меню или одновременно использовать клавиши Ctrl + Shift + Plus (+). Но что если мы автоматизируем этот процесс, создав макрос через VBA? Это очень полезно, когда мы работаем над созданием макроса с огромной структурой кодирования или добавлением столбца или нескольких столбцов, что также является задачей для выполнения. В VBA есть весь столбец, а функция Вставка используется для вставки нового столбца.
Как вставить столбец в Excel VBA?
Мы научимся вставлять столбец в Excel с использованием кода VBA на нескольких примерах.
Вы можете скачать этот шаблон Excel для вставки столбцов VBA здесь — Шаблон Excel для вставки столбцов VBA
Пример № 1 — VBA Вставить столбец
У нас есть таблица из 2 столбцов и 11 строк, как показано ниже. Теперь мы будем автоматизировать процесс вставки столбцов разными способами.
Для этого выполните следующие шаги:
Шаг 1: Сначала вставьте новый модуль в VBA из пункта меню «Вставка», как показано ниже.
Шаг 2: Теперь запустите подкатегорию в названии выполняемой функции, например VBA Insert Column, или в любое другое имя, как показано ниже.
Код:
Sub VBAColumn1 () End Sub
Шаг 3. Сначала выберите диапазон ячеек или полных столбцов, в которые мы хотим вставить столбец, а затем команду Вставить, как показано ниже. Команда Вставить позволит вставить любую строку или столбец или ячейку в выбранный столбец или ячейку диапазона.
Код:
Sub VBAColumn1 () Диапазон ("B: B"). Вставить конец Sub
Шаг 4: Теперь выберите диапазон ячеек в качестве ссылки, откуда мы хотим вставить столбец, как показано ниже.
Код:
Sub VBAColumn1 () Range ("B: B"). Вставить диапазон ("B4") End Sub
Шаг 5 : Как обсуждалось в объяснении, мы будем использовать весь столбец с функцией Вставка, как показано ниже. Это позволит вставить столбец.
Код:
Sub VBAColumn1 () Range ("B: B"). Вставить диапазон ("B4"). CompleteColumn.Insert End Sub
Шаг 6: Теперь скомпилируйте код, нажав функциональную клавишу F8, а затем нажмите кнопку Play, чтобы запустить полный код, который находится под строкой меню, как показано ниже. Мы заметим, что между column1 и column2 будут вставлены два новых пустых столбца, как показано ниже.
Пример № 2 — VBA Вставить столбец
Есть еще один способ вставки столбца. Этот метод включает в себя комбинацию различных команд.
Шаг 1: Вставьте новый модуль из меню «Вставка».
Шаг 2: И напишите подкатегорию в названии функции «Выполнено», как показано ниже, или в любом другом имени.
Код:
Sub VBAColumn2 () End Sub
Шаг 3: С помощью размерной переменной DIM с любым алфавитом или именем определите его как Range let ‘скажем Column, как показано ниже.
Код:
Sub VBAColumn2 () Dim Column As Sub End Sub
Шаг 4: Теперь следуя за Range, используйте функцию Set с столбцом определенного размера, как показано ниже, за которым следует знак равенства («=»).
Код:
Sub VBAColumn2 () Dim Column As Range: Установить столбец = Конец Sub
Шаг 5: Теперь используйте функцию Application, встроенную в VBA с определенным диапазоном полного столбца B.
Код:
Sub VBAColumn2 () Dim Column As Range: Установить столбец = Application.Range ("B: B") End Sub
Шаг 6: Теперь используйте переменную Column с функцией Insert, как показано ниже.
Код:
Sub VBAColumn2 () Dim Column As Range: Установить Column = Application.Range ("B: B") Column.Insert End Sub
Шаг 7: Мы можем сдвинуть, чтобы вставить столбец вправо или влево с помощью команды Shift. Обычно столбец вставляется в правое направление всегда от выбранной ячейки или столбца.
Код:
Sub VBAColumn2 () Dim Column As Диапазон: Установить Column = Application.Range ("B: B") Column.Insert Shift: = xlShiftToRight, End Sub
Шаг 8: Наконец, выберите исходный формат ссылки справа или снизу для столбца или строки в зависимости от типа вставки.
Код:
Sub VBAColumn2 () Dim Column As Диапазон: Установите Column = Application.Range ("B: B") Column.Insert Shift: = xlShiftToRight, CopyOrigin: = xlFormatFromRightOrBelow End Sub
Шаг 9: Теперь все готово. Мы можем скомпилировать код и запустить его. Мы увидим новый столбец между Colum1 и Column2, который будет добавлен, как показано ниже.
Пример № 3 — VBA Вставить столбец
Этот пример — еще один самый простой способ вставить столбец в VBA.
Шаг 1: Вставьте новый модуль
Шаг 2: Добавьте подкатегорию в название столбца вставки VBA, как показано ниже.
Код:
Sub VBAColumn3 () End Sub
Шаг 3: Сначала выберите ссылку на столбец или ячейку, куда мы хотим добавить столбец, с помощью Select, как показано ниже.
Код:
Sub VBAColumn3 () Столбцы ("B: B"). Выберите End Sub
Шаг 4: Во второй строке используйте команду «Выделение» вместе с функцией «Вставка», как показано ниже.
Код:
Sub VBAColumn3 () Столбцы ("B: B"). Выберите Selection.Insert End Sub
Шаг 5: Наконец, выберите позицию, в которую мы хотим сместить вставленный новый столбец, вправо или влево с помощью функции Shift. Выбор размещения нового столбца полностью зависит от индивидуальных требований.
Код:
Sub VBAColumn3 () Столбцы ("B: B"). Выберите Selection.Insert Shift: = xlToRight End Sub
Шаг 6: Это завершает наш код. Теперь мы можем скомпилировать код, чтобы найти, есть ли какая-либо ошибка. Если ошибки не найдены, запустите код. Мы увидим, что новый столбец будет добавлен между столбцами 1 и 2, как показано ниже.
Пример № 4 — VBA Вставить столбец
В этом примере мы узнаем, как добавлять новые столбцы после каждого уже стоящего столбца.
Шаг 1: Теперь вставьте модуль из меню вставки.
Шаг 2: После этого добавьте подкатегорию в название VBA Insert Column с последовательностью чисел.
Код:
Sub VBAColumn4 () End Sub
Шаг 3: Теперь используйте DIM для определения переменной с любым именем. Мы использовали столбец как целое число (в случае использования чисел)
Код:
Sub VBAColumn4 () Dim Column As Integer End Sub
Шаг 4: К столбцу после каждого стоящего заполненного столбца мы выберем и используем столбец (2), чтобы добавить новый столбец, как показано ниже.
Код:
Sub VBAColumn4 () Тусклый столбец в виде целочисленных столбцов (2). Выберите End Sub
Шаг 5: Откройте цикл For-Next, где мы напишем условия для вставки столбца друг за другом, как показано.
Код:
Sub VBAColumn4 () Тусклый столбец в виде целочисленных столбцов (2). Выберите для следующего конца Sub
Шаг 6: Поскольку в наших образцах данных есть только 2 столбца, мы можем добавить только новый столбец из этих столбцов. Таким образом, мы используем диапазон от 0 до 2 столбцов последовательности.
Код:
Sub VBAColumn4 () Тусклый столбец в виде целочисленных столбцов (2). Выберите для столбца = от 0 до 2 Next End Sub
Шаг 7: С помощью функции ActiveCell используйте FullColumn для вставки, как показано ниже.
Код:
Sub VBAColumn4 () Темный столбец в виде целочисленных столбцов (2). Выбрать для столбца = от 0 до 2 ActiveCell.EntireColumn.Insert Next End Sub
Шаг 8: С помощью функции ActiveCell используйте Offset, чтобы разместить вновь добавленный столбец. Мы используем 0 и 2- ю позицию.
Код:
Sub VBAColumn4 () Затемнять столбец в виде целочисленных столбцов (2). Выбрать для столбца = от 0 до 2 ActiveCell.EntireColumn.Insert ActiveCell.Offset (0, 2). Выбрать следующий конец Sub
Шаг 9: Теперь скомпилируйте код и запустите его, если ошибки не найдены. Мы увидим, что после column1 и column2 добавляются новые столбцы.
Плюсы Excel VBA Вставить столбец
- Это полезно, так как быстро добавляет новый столбец в любой диапазон ячеек.
- Это легко реализовать, даже если структура кода огромна.
- Если мы работаем над огромным кодом, для завершения кода потребуется новая колонка, использование приведенных выше примеров облегчит задачу.
То, что нужно запомнить
- Если вы используете пример 4, не забудьте выбрать диапазон столбцов, пока таблица не будет применима.
- Сохранение файла в макросе enable excel, сохранение кода.
- Вставьте только применимые и обязательные столбцы, чтобы избежать добавления ненужных столбцов.
Рекомендуемые статьи
Это руководство по вставке столбца VBA. Здесь мы обсуждаем, как вставить столбец в Excel с использованием кода VBA, а также с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —
- VBA VLOOKUP Функция
- Функция DCOUNT в Excel
- VBA Copy Paste
- Функция COMBIN в Excel