Excel макрос на добавление строки в таблицу

 

manah1

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

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

Здравствуйте!!! Наткнулся на Ваш форум и решил попросить помощи у гуру VBA. Помогите пожалуйста с макросом вставки строк в таблицу с последующим их заполнением данными с другого листа книги. Более подробно в файле. Очень надеюсь на вашу помощь.Спасибо.

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

  • Реестр.xlsx (89.64 КБ)

 

А что такое «каталожный номер»? в «Реестре» его нет.
Если нужно чтобы каждая кнопка копировала данные из конкретной строки одного листа в конкретную строку другого листа, как я понял, то тогда проще всего записать свои действия для каждой кнопки макрорекордером, и затем присвоить каждой из кнопочек свой макрос.

 

manah1

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

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

Столбца каталожный номер в таблице на листе «Реестр» нет так и должно быть.
В том то и дело что каждая кнопка должна добавить новую строку в таблицу на листе «реестр» и заполнить ее данными из соответствующей строки таблицы на листе «Наряд-заказ». Остальные столбцы таблицы на листе «реестр» заполняются и постоянных конкретных ячеек листа «наряд-заказ».

 

так?

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

  • Реестр.xlsm (97.39 КБ)

 

manah1

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

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

МатросНаЗебре, нет не так должна заполняться таблица на листе «реестр».

Другими словами если нажмем на первый «+», то в таблицу на листе «реестр» добавится новая строка (не важно сверху или снизу).
Далее произойдет заполнение соответсвующих ячеек из первой строки таблицы на листе «наряд-заказ» (напротив «+» ;) .
Остальные ячейки новой добавленной строки заполняются из конкретных ячеек на листе «наряд-заказ» в соответствии с названием колонок таблицы.
Пустые ячейки новой строки не заполняются ни чем.

 

так?

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

  • Реестр.xlsm (99.33 КБ)

 

manah1

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

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

МатросНаЗебре, да точно так. Огромное спасибо!!!
Только как быть с другими ячейками которые тоже должны заполнятся. В таблице пустыми остаются только колонки «цена за единицу, сумма и номер реестра».

 

V

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

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

#8

02.10.2014 11:30:49

я таким методом пошел  :)  , один код для любой кнопки. + перекрашивание фигуры если на неё нажали.

Собственно сам код

Цитата
Только как быть с другими ячейками

используйте эту строчку — меняя букву «А» на нужную и адрес «Н10» на нужный.

Код
 Sheets("Реестр").Range("A" & i).Value = Range("H10").Value
 

Изменено: V02.10.2014 11:35:38

 

manah1

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

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

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

И еще вопрос, почему только после повторного нажатия на кнопку она меняет цвет?

Изменено: manah102.10.2014 11:49:24

 

V

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

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

#10

02.10.2014 12:25:17

Цитата
границы строки как их дорисовать макросом

добавьте в конце кода

Код
With Sheets("Реестр").Range("A2:N" & i)
        .Font.Size = 8 'задаем размер шрифта
        .HorizontalAlignment = xlCenter 'выравнивание текст в ячейках горизонталь по центру
        .VerticalAlignment = xlCenter ' выравнивание текст в ячейках вертикаль по центру
        .Borders(xlEdgeLeft).LineStyle = xlContinuous ' вставка левой границы
        .Borders(xlEdgeBottom).LineStyle = xlContinuous ' вставка нижней границы
        .Borders(xlEdgeRight).LineStyle = xlContinuous ' вставка правой границы
        .Borders(xlInsideVertical).LineStyle = xlContinuous ' вставка промежуточных вертикальных линий
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous ' вставка промежуточных горизонтальных линий
    End With 

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

Изменено: V02.10.2014 12:29:59

 

Юрий М

Модератор

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

Контакты см. в профиле

#11

02.10.2014 12:51:06

Немного укоротим:

Код
With Sheets("Реестр").Range("A2:N" & i)
    .Font.Size = 8 'задаем размер шрифта
    .HorizontalAlignment = xlCenter 'выравнивание текст в ячейках горизонталь по центру
    .VerticalAlignment = xlCenter ' выравнивание текст в ячейках вертикаль по центру
    .Borders.LineStyle = xlContinuous
End With
 
 

manah1

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

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

#12

02.10.2014 12:56:59

V,Юрий М, огромное спасибо все работает как надо!!!

Вставка диапазона со сдвигом ячеек вправо или вниз методом 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

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


  1. Image titled 12824869 1

    1

    Open your project in Excel. To do this, double-click the Excel document that contains your data in Finder (Macs) or File Explorer (Windows). Alternatively, if you already have Excel open, click File > Open and select the file that has your data.

  2. Image titled 12824869 2

    2

    Make sure the Developer tab is displayed on your editing ribbon. If it isn’t and you’re using Windows, go to the File tab and click Options > Customize ribbon. Under «Main tabs'» check the box next to «Developer.»

    • If you’re using a Mac, enable the Developer tab by clicking the Excel menu at the top of the screen and selecting Preferences. Click Ribbon & Toolbar, check the «Developer» box in the «Customize this Ribbon» category, and click Save.

    Advertisement

  3. Image titled 12824869 3

    3

    Open the VBA editor. Click the Developer tab and select Visual Basic to do so. Alternatively, you can press Alt + F11.

  4. Image titled 12824869 4

    4

    Right-click a sheet. In the vertical menu on the left side of the window, you’ll see a list of your workbook’s sheets. Right-click on any of these to get another drop-down menu.

  5. Image titled 12824869 5

    5

    Hover your cursor over Insert and click Module. When you hover over Insert, a menu will pop out to the right of the menu. Clicking on Module will create a space for you to enter a VBA code and run it.

  6. Image titled 12824869 6

    6

    Enter this code into your VBA window:

    Sub Insert_Rows_Loop()
         Dim CurrentSheet As Object
    
         ' Loop through all selected sheets.
         For Each CurrentSheet In ActiveWindow.SelectedSheets
            ' Insert 5 rows at top of each sheet.
            CurrentSheet.Range("a1:a5").EntireRow.Insert
         Next CurrentSheet
    End Sub
    
    • With this code, you’ll be inserting rows starting at A1 and ending at A5—that’s 5 empty new rows at the top of the sheet.[1]
      You can replace these cell addresses with the location into which you want to place the code, such as beginning with the last row in the sheet to any ending point.
  7. Image titled 12824869 7

    7

    Press F5. Alternatively, you can click the green Play icon above the VB editor writing space.

  8. Image titled 12824869 8

    8

    Click OK to continue. This adds the rows to your sheet.

  9. Advertisement

  1. Image titled 12824869 9

    1

    Open your project in Excel. To do this, double-click the Excel document that contains your data in Finder (Macs) or File Explorer (Windows). Alternatively, if you already have Excel open, click File > Open and select the file.

    • Use this method if you want to learn how to copy existing formulas into new rows you add to your data.
  2. Image titled 12824869 10

    2

    Insert a row inside your data. The keyboard shortcut you’ll use can only add a formula from the row above it, so make sure you insert the row in the middle or the bottom of your data collection.

    • To insert a row, right-click the row below where you want the new row to be added, then click Insert.
  3. Image titled 12824869 11

    3

    Click to select the cell in the new row where you want to include the formula. Remember, this keyboard shortcut will copy the formula from the cell above to the cell you have selected.

    • The cell will highlight to indicate that it is selected.
  4. Image titled 12824869 12

    4

    Press Ctrl+D. The shortcut is the same for Mac and Windows and will fill the formula down from the cell above.
    [2]

  5. Advertisement

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

Thanks for submitting a tip for review!

About This Article

Article SummaryX

1. Open your project in Excel.

2. Insert a row inside your data.

3. Click to select the cell in the new row where you want to include the formula.
4. Press Crtl + D.

Did this summary help you?

Thanks to all authors for creating a page that has been read 34,504 times.

Is this article up to date?

I have an excel which serves to record the food you ingest for a specific day and meal. I hav a grid in which each line represent a food you ate, how much sugar it has, etc.

Then i’ve added an save button to save all the data to a table in another sheet.

This is what i have tried

    Public Sub addDataToTable(ByVal strTableName As String, ByRef arrData As Variant)
    Dim lLastRow As Long
    Dim iHeader As Integer
    Dim iCount As Integer

    With Worksheets(4).ListObjects(strTableName)
        'find the last row of the list
        lLastRow = Worksheets(4).ListObjects(strTableName).ListRows.Count

        'shift from an extra row if list has header
        If .Sort.Header = xlYes Then
            iHeader = 1
        Else
            iHeader = 0
        End If
    End With

    'Cycle the array to add each value
    For iCount = LBound(arrData) To UBound(arrData)
        **Worksheets(4).Cells(lLastRow + 1, iCount).Value = arrData(iCount)**
    Next iCount
End Sub

but i keep getting the same error on the highlighted line:

Application-defined or object-defined error

What i am doing wrong?

Thanks in advance!

Siddharth Rout's user avatar

asked Sep 6, 2012 at 10:11

Miguel Teixeira's user avatar

Miguel TeixeiraMiguel Teixeira

7731 gold badge10 silver badges29 bronze badges

You don’t say which version of Excel you are using. This is written for 2007/2010 (a different apprach is required for Excel 2003 )

You also don’t say how you are calling addDataToTable and what you are passing into arrData.
I’m guessing you are passing a 0 based array. If this is the case (and the Table starts in Column A) then iCount will count from 0 and .Cells(lLastRow + 1, iCount) will try to reference column 0 which is invalid.

You are also not taking advantage of the ListObject. Your code assumes the ListObject1 is located starting at row 1. If this is not the case your code will place the data in the wrong row.

Here’s an alternative that utilised the ListObject

Sub MyAdd(ByVal strTableName As String, ByRef arrData As Variant)
    Dim Tbl As ListObject
    Dim NewRow As ListRow

    ' Based on OP 
    ' Set Tbl = Worksheets(4).ListObjects(strTableName)
    ' Or better, get list on any sheet in workbook
    Set Tbl = Range(strTableName).ListObject
    Set NewRow = Tbl.ListRows.Add(AlwaysInsert:=True)

    ' Handle Arrays and Ranges
    If TypeName(arrData) = "Range" Then
        NewRow.Range = arrData.Value
    Else
        NewRow.Range = arrData
    End If
End Sub

Can be called in a variety of ways:

Sub zx()
    ' Pass a variant array copied from a range
    MyAdd "MyTable", [G1:J1].Value
    ' Pass a range
    MyAdd "MyTable", [G1:J1]
    ' Pass an array
    MyAdd "MyTable", Array(1, 2, 3, 4)
End Sub

answered Sep 6, 2012 at 11:06

chris neilsen's user avatar

chris neilsenchris neilsen

52.2k10 gold badges84 silver badges122 bronze badges

6

Tbl.ListRows.Add doesn’t work for me and I believe lot others are facing the same problem. I use the following workaround:

    'First check if the last row is empty; if not, add a row
    If table.ListRows.count > 0 Then
        Set lastRow = table.ListRows(table.ListRows.count).Range
        For col = 1 To lastRow.Columns.count
            If Trim(CStr(lastRow.Cells(1, col).Value)) <> "" Then
                lastRow.Cells(1, col).EntireRow.Insert
                'Cut last row and paste to second last
                lastRow.Cut Destination:=table.ListRows(table.ListRows.count - 1).Range
                Exit For
            End If
        Next col
    End If

    'Populate last row with the form data
    Set lastRow = table.ListRows(table.ListRows.count).Range
    Range("E7:E10").Copy
    lastRow.PasteSpecial Transpose:=True
    Range("E7").Select
    Application.CutCopyMode = False

Hope it helps someone out there.

answered Mar 25, 2013 at 10:22

user1058322's user avatar

1

I had the same error message and after lots of trial and error found out that it was caused by an advanced filter which was set on the ListObject.
After clearing the advanced filter .listrows.add worked fine again.
To clear the filter I use this — no idea how one could clear the filter only for the specific listobject instead of the complete worksheet.

Worksheets("mysheet").ShowAllData

answered Dec 4, 2014 at 17:18

kskoeld's user avatar

1

I actually just found that if you want to add multiple rows below the selection in your table
Selection.ListObject.ListRows.Add AlwaysInsert:=True works really well. I just duplicated the code five times to add five rows to my table

answered Sep 28, 2015 at 20:16

fireball8931's user avatar

I had the same problem before and i fixed it by creating the same table in a new sheet and deleting all the name ranges associated to the table, i believe whene you’re using listobjects you’re not alowed to have name ranges contained within your table hope that helps thanks

answered Jun 25, 2017 at 20:13

Djamel Ben's user avatar

0

Ran into this issue today (Excel crashes on adding rows using .ListRows.Add).
After reading this post and checking my table, I realized the calculations of the formula’s in some of the cells in the row depend on a value in other cells.
In my case of cells in a higher column AND even cells with a formula!

The solution was to fill the new added row from back to front, so calculations would not go wrong.

Excel normally can deal with formula’s in different cells, but it seems adding a row in a table kicks of a recalculation in order of the columns (A,B,C,etc..).

Hope this helps clearing issues with .ListRows.Add

rink.attendant.6's user avatar

answered Sep 4, 2018 at 12:35

ErikB's user avatar

As using ListRow.Add can be a huge bottle neck, we should only use it if it can’t be avoided.
If performance is important to you, use this function here to resize the table, which is quite faster than adding rows the recommended way.

Be aware that this will overwrite data below your table if there is any!

This function is based on the accepted answer of Chris Neilsen

Public Sub AddRowToTable(ByRef tableName As String, ByRef data As Variant)
    Dim tableLO As ListObject
    Dim tableRange As Range
    Dim newRow As Range

    Set tableLO = Range(tableName).ListObject
    tableLO.AutoFilter.ShowAllData

    If (tableLO.ListRows.Count = 0) Then
        Set newRow = tableLO.ListRows.Add(AlwaysInsert:=True).Range
    Else
        Set tableRange = tableLO.Range
        tableLO.Resize tableRange.Resize(tableRange.Rows.Count + 1, tableRange.Columns.Count)
        Set newRow = tableLO.ListRows(tableLO.ListRows.Count).Range
    End If

    If TypeName(data) = "Range" Then
        newRow = data.Value
    Else
        newRow = data
    End If
End Sub

answered Apr 25, 2017 at 23:41

Jonas_Hess's user avatar

Jonas_HessJonas_Hess

1,8241 gold badge20 silver badges32 bronze badges

1

Just delete the table and create a new table with a different name. Also Don’t delete entire row for that table. It seems when entire row containing table row is delete it damages the DataBodyRange is damaged

answered Jun 11, 2016 at 13:19

Bhanu Sinha's user avatar

Bhanu SinhaBhanu Sinha

1,51612 silver badges10 bronze badges

В данном практическом примере приведен код макроса для умной вставки пустых строк между ячейками. Пошаговая инструкция как вставлять строки между объединенными и необъединенными ячейками одновременно для любой таблицы.

Макрос для вставки строк с определенной высотой

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

Исходная таблица.

Необходимо экспонировать группы ячеек для каждого штата. Для этого мы добавим по одной пустой строке между каждой группой розничных точек. При этом не имеет значение будет ли содержать группа объединенные ячейки или нет. Ведь некоторые группы состоят из одной строки. А также дополнительно уменьшим высоту этих пустых строк, чтобы внешний вид таблицы был стильным. Выполнить вручную все эти действия: выделение отдельных групп ячеек, вставка между ними пустых строк, а потом изменение высоты для этих же строк – это не рационально использование сил и времени. Особенно если таблица имеет десятки тысяч строк. Лучше написать свой макрос, который сам автоматически и молниеносно выполнит эту рутинную работу за Вас.

Перейдите в режим редактора макросов Visual Basic (ALT+F11):

Basic.

Создайте в нем новый модуль с помощью инструмента: «Insert»-«Module». А потом запишите в него VBA-код самого макроса:

Sub VstavkaStrok()
Dim i As Long
Dim pustroka As Long
For i = Selection.Rows.Count To 2 Step -1
pustroka = Selection(i, 1).Row + 1
ActiveSheet.Rows(pustroka).Insert xlShiftDown
ActiveSheet.Rows(pustroka).RowHeight = 7
ActiveSheet.Rows(pustroka).Borders(xlInsideVertical). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeLeft). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeRight). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Interior. _
ColorIndex = xlColorIndexNone
i = i - Selection(i, 1).MergeArea.Rows.Count + 1
Next
End Sub

VBA code.

Теперь если мы хотим вставить по одной пустой строке между каждой объединенной и необъединенной ячейкой, которые находиться в столбце A? Тогда а в таблице отчета по продажам выделяем диапазон ячеек A:D18 и запускаем наш макрос выбрав инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«VstavkaStrok»-«Выполнить». После запуска макроса таблица будет выглядеть как показано на рисунке:

Пример.

Сначала в коде объявлены две переменные:

  1. i – переменная выполняет роль счетчика в цикле.
  2. pustroka – переменная будет хранить в себе очередной номер для каждой строки выделенного диапазона.

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

  1. В первой инструкции мы присваиваем для переменной pustroka номер строки которая находиться под текущей строкой.
  2. Следующая инструкция добавляет пустую строку с высотой в 7 пикселей.
  3. Удаляются в добавленной строке все вертикальные границы, а также заливка.
  4. Уменьшается значение переменной i на количество строк, которые охватывает текущая объединенная ячейка, находящаяся в первом столбце выделенного диапазона.



Умная вставка строк с помощью макроса

Если же мы хотим экспонировать только самые большие группы. Допустим Вы желаете сделать так, чтобы макросом были вставлены пустые строки только после объединенных ячеек в столбце A, которые охватывают много строк. И не вставлять пустые строки после необъединенных ячеек или тех объединенных ячеек, которые охватывают не более 1-ой строки. Тогда после строки в коде макроса где описано начало цикла добавляем строку кода с условной инструкцией:

If Selection(i, 1).MergeArea.Rows.Count <> 1 Then

Также перед инструкцией конца цикла Next следует вставить инструкцию конца условия – End If.

Обратите внимание! Параметр условия для игнорирования объединенных ячеек с определенным количеством озвучиваемых строк можно будет даже настраивать, изменяя число после оператора сравнения.

Такая модификация кода макроса внутри цикла будет следить за тем применять ли ряд инструкций к текущей строке или игнорировать их на данном этапе прохода по срокам. Если же текущая строка не содержит необъединенной ячейки или объединенная ячейка охватывает более чем 1-ну строку, тогда для нее применяться все инструкции форматирования. Полная версия модифицированного года выглядит так:

Sub VstavkaStrok1()
Dim i As Long
Dim pustroka As Long
For i = Selection.Rows.Count To 2 Step -1
  If Selection(i, 1).MergeArea.Rows.Count <> 1 Then
  pustroka = Selection(i, 1).Row + 1
  ActiveSheet.Rows(pustroka).Insert xlShiftDown
  ActiveSheet.Rows(pustroka).RowHeight = 7
  ActiveSheet.Rows(pustroka).Borders(xlInsideVertical). _
  LineStyle = xlLineStyleNone
  ActiveSheet.Rows(pustroka).Borders(xlEdgeLeft). _
  LineStyle = xlLineStyleNone
  ActiveSheet.Rows(pustroka).Borders(xlEdgeRight). _
  LineStyle = xlLineStyleNone
  ActiveSheet.Rows(pustroka).Interior. _
  ColorIndex = xlColorIndexNone
  i = i - Selection(i, 1).MergeArea.Rows.Count + 1
  End If
Next
End Sub

Результат автоматического форматирования таблицы отчета с учетом новых условий в коде макроса:

Умная вставка.

Как видите с помощью макросов таблицы любых объемов данных можно форматировать в один клик мышкой.

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