Макрос добавление строки по условию excel

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)


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

0 / 0 / 0

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

Сообщений: 42

1

Макрос на добавление строки при условии

06.09.2012, 13:52. Показов 10897. Ответов 3


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

Добрый день!
подскажите пож:
нужно написать макрос, чтобы добавлялась строка, при условии что:
например идут ячейки
1
1
1
2
2
3
3
нужно чтобы строка добавлялась между 1-кой и 2-кой или 2-кой и 3-кой



0



Busine2012

1300 / 402 / 22

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

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

06.09.2012, 14:30

2

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Sub Procedure_1()
 
    Dim lLastRow As Long
    Dim i As Long
    
    'Определение последней заполненной ячейки в столбце A.
    lLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    'Отключаем обновление монитора, чтобы код быстро работал.
    Application.ScreenUpdating = False
    
    'Двигаемся от первой строки до предпоследней заполненной строки в столбце A.
    For i = 1 To lLastRow - 1 Step 1
        If Cells(i, "A").Value <> Cells(i + 1, "A").Value Then
            Rows(i + 1).Insert Shift:=xlDown
            'Увеличиваем i, т.к. надо перескочить теперь через строку.
            i = i + 1
        End If
    'Next тоже увеличивает i.
    Next i
    
    'Включаем обновление монитора.
    Application.ScreenUpdating = True
    
    'Вывод сообщения о завершении работы кода.
    MsgBox "Работа кода завершена!", vbInformation
 
End Sub



1



Все имена заняты

1250 / 408 / 52

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

Сообщений: 629

06.09.2012, 16:41

3

Busine2012, но ведь уже при
1
2
3
4
такой макрос не отработает.

Мой вариант:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub test()
Dim cll As Range
For Each cll In ActiveSheet.Range("A1").CurrentRegion.Cells
    If cll.Row > 1 Then
        If cll.Value <> cll.Offset(-1, 0).Value And Not IsEmpty(cll.Offset(-1, 0).Value) Then
            cll.EntireRow.Insert
        End If
    End If
Next
End Sub



2



Busine2012

1300 / 402 / 22

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

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

06.09.2012, 16:48

4

Код в сообщении #2 нерабочий, вот правильный вариант:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub Procedure_1()
 
    Dim lLastRow As Long
    Dim i As Long
    
    'Определение последней заполненной ячейки в столбце A.
    lLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    'Отключаем обновление монитора, чтобы код быстро работал.
    Application.ScreenUpdating = False
    
    'Двигаемся от последней заполненной строки до второй строки в столбце A.
    For i = lLastRow To 2 Step -1
        If Cells(i, "A").Value <> Cells(i - 1, "A").Value Then
            Rows(i).Insert Shift:=xlDown
        End If
    Next i
    
    'Включаем обновление монитора.
    Application.ScreenUpdating = True
    
    'Вывод сообщения о завершении работы кода.
    MsgBox "Работа кода завершена!", vbInformation
 
End Sub



1



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

06.09.2012, 16:48

Помогаю со студенческими работами здесь

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

Макрос, который перебирает диапазон ячеек и при условии выводит текст
Здравствуйте, помогите сделать макрос.
На странице Результат мониторинга нужно пройтись по…

Создать макрос, отрабатывающий при условии, что активна определенная ячейка
Нужно сделать так: если ячейка А1 активна, то Range(&quot;B2&quot;).clearcontents. Прошу вас, подскажите, как…

Макрос, что бы при определенном условии закрашивались ячейки в необходимый цвет
Здравствуйте, необходимо написать программу или макрос, что бы при определенном условии…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

4

Добавление строк в зависимости от условия

ILYA_SERGEEVICH_1987

Дата: Четверг, 06.09.2018, 20:37 |
Сообщение № 1

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

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

Сообщений: 10


Репутация:

0

±

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


Excel 2013

Доброго времени суток подскажите как можно решить задачу по автоматическому добавлению строк при определённых условия. Есть определённый массив данных на Листе 1 (Примера) данные могут повторяться. На Листе 2 сведён другой массив данных вся загвоздка заключается что строк на Листе №2 может быть и 2 и 10 и 50 строк с одинаковыми значением для поиска. В результате данных манипуляций должны получить таблицу Лист 3 (сводную) куда добавлены данные по определённому алгоритму, а именно сведена таблица из листа №1 и в зависимости от того сколько имеется строк на листе №2 с определённым искомым значением столько строк и должно быть добавлено в сводную, данные в Листе 1 и 2 могут постоянно меняться или обновляться в зависимости от этого Лист №3 так же должен меняться по вышеперечисленному алгоритму. Подскажите как можно решить данную задачу, через стандартные функции решения найти не смог, если оно есть будет очень хорошо. Дума что через VBA решение должно быть точно. Заранее спасибо.

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

7807303.xlsx
(10.7 Kb)

 

Ответить

Pelena

Дата: Пятница, 07.09.2018, 08:23 |
Сообщение № 2

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.
Можно формулами подтянуть во вторую таблицу значения из первой и построить сводную.
Или с помощью PowerPivot объединить таблицы и построить сводную.


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

 

Ответить

ILYA_SERGEEVICH_1987

Дата: Пятница, 07.09.2018, 19:10 |
Сообщение № 3

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

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

Сообщений: 10


Репутация:

0

±

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


Excel 2013

Здравствуйте. Спасибо что ответили. Честно говоря не умею пользоваться сводными таблицами, или может быть всё решать через функции и макросы привык. Обязательно конечно научусь пригодится. Но проблема в том что таблицей предстоит пользоваться «чайникам» в EXCEL. Им нужно просто вставить 2 отчета в определённые листы и должны получить третий. Какие либо действия с их стороны могут привести к фатальным ошибкам ввиду низкой компетенции.

 

Ответить

_Igor_61

Дата: Понедельник, 10.09.2018, 20:58 |
Сообщение № 4

Группа: Проверенные

Ранг: Ветеран

Сообщений: 504


Репутация:

90

±

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


Excel 2007

Здравствуйте! Проверяйте:

Сообщение отредактировал _Igor_61Понедельник, 10.09.2018, 21:23

 

Ответить

ILYA_SERGEEVICH_1987

Дата: Среда, 10.10.2018, 18:35 |
Сообщение № 5

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

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

Сообщений: 10


Репутация:

0

±

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


Excel 2013

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

 

Ответить

Добрый день!
Возник вопрос, связанный с темой

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

например
1 — вставить ниже 1 строку
4 — вставить ниже к строки
0 — ничего не менять

спасибо


Вот как пример в ячейку I3 надо писать кол-во строк.


ничего не понял из этого файла, нужно не из одной ячейки сделать вставку и перебрать диапазон


ну я и написал что вот как пример, а как сделать в VBA не знаю.


Цитата: iron priest от 30.05.2012, 11:52
задача следующего плана, нужно вставить некоторое кол-во строк в зависимости от значения в ячейках колонки А

Вот рецепт:

Sub SHD_AddRows()
  LR = Cells(Rows.Count, 1).End(xlUp).Row
  For i = LR To 1 Step -1
    If Val(Cells(i, 1)) > 0 Then
      Rows(i + 1 & ":" & i + Cells(i, 1)).Insert
    End If
  Next
End Sub

Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли


Цитата: Шпец Докапыч от 31.05.2012, 15:37

Цитата: iron priest от 30.05.2012, 11:52
задача следующего плана, нужно вставить некоторое кол-во строк в зависимости от значения в ячейках колонки А

Вот рецепт:
Sub SHD_AddRows()
  LR = Cells(Rows.Count, 1).End(xlUp).Row
  For i = LR To 1 Step -1
    If Val(Cells(i, 1)) > 0 Then
      Rows(i + 1 & ":" & i + Cells(i, 1)).Insert
    End If
  Next
End Sub

А как сделать что бы из другой колонки брал?


Может как то так

Option Explicit
Sub SHD_AddRows()
 Dim ColN As Integer, LR As Long, i As Long
 ColN = 3 'номер колонки для поиска количества строк
 LR = Cells(Rows.Count, ColN).End(xlUp).Row 'Определяем номер последней строки
 For i = LR To 1 Step -1 'Идем цыклом снизу вверх чтоб не вызвать зацыкливания
   If Val(Cells(i, ColN)) > 0 Then 'проверяем значение из ячейки на условие больше нуля
     Rows(i + 1 & ":" & i + Cells(i, ColN)).Insert 'вставляем строки
   End If
 Next
End Sub

Прошу прощения у Шпец Докапыч, а то влез тут со своими комментариями в его интеллектуальную собственность   ;)

Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.


Цитата: Poltava от 31.05.2012, 22:12
Может как то так
Option Explicit
Sub SHD_AddRows()
 Dim ColN As Integer, LR As Long, i As Long
 ColN = 3 'номер колонки для поиска количества строк
 LR = Cells(Rows.Count, ColN).End(xlUp).Row 'Определяем номер последней строки
 For i = LR To 1 Step -1 'Идем цыклом снизу вверх чтоб не вызвать зацыкливания
   If Val(Cells(i, ColN)) > 0 Then 'проверяем значение из ячейки на условие больше нуля
     Rows(i + 1 & ":" & i + Cells(i, ColN)).Insert 'вставляем строки
   End If
 Next
End Sub

Прошу прощения у Шпец Докапыч, а то влез тут со своими комментариями в его интеллектуальную собственность   ;)

Еще одна нескромная просьба, можно сделать так что бы он работал в двух режимах, удалял строки и добавлял строки согласно цифрам в столбце, то что делал целый день с помощью этого кода сделал за 40 минут :)


А как это должно быть ??? макрос проверяет и если числа отрицательные удаляет, либо два разных макроса один удаляет другой добавляет и тут уже без отрицательных чисел можно. либо макрос будет вызываться из другой процедуры и при вызове в качестве параметра будет идти добавлять или удалять строки ??? Да и вообще удаление строк это более ответственный процесс! тут нужно понимать что делать если в удаляемой строке есть информация либо если удалить нужно строки которые дальше могли использоваться в общем тут больше проверок нужно о которых только вы знаете.
Ну а в общем случае попробуйте заменить .Insert на .Delete

Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.


Цитата: Poltava от 01.06.2012, 11:17
А как это должно быть ??? макрос проверяет и если числа отрицательные удаляет, либо два разных макроса один удаляет другой добавляет и тут уже без отрицательных чисел можно. либо макрос будет вызываться из другой процедуры и при вызове в качестве параметра будет идти добавлять или удалять строки ??? Да и вообще удаление строк это более ответственный процесс! тут нужно понимать что делать если в удаляемой строке есть информация либо если удалить нужно строки которые дальше могли использоваться в общем тут больше проверок нужно о которых только вы знаете.
Ну а в общем случае попробуйте заменить .Insert на .Delete

Ну можно просто сделать два макроса один прибавляет другой удаляет, числа положительные.Нужно затем , что таблица сводная меняется постоянно и ,что бы не корячится с удалением и добавлением легче сделать через макрос. С .Delete, работает вроде в противоположную сторону как .Insert так что всё пучком! Всем спасибо кто откликнулся, сильно облегчили труд.


Sub Main_Copy()

    Dim shSrc As Worksheet, shRes As Worksheet
    Dim r As Long

            ‘1. Отключение монитора.
    Application.ScreenUpdating = False

        ‘2. Присваиваем имя «shSrc» активному листу.
    Set shSrc = ActiveSheet

        ‘3. Открытие файла, в который надо вставить данные.
        ‘ Первому листу присваиваем имя «shRes».
    Set shRes = Workbooks.Open(Filename:=ActiveWorkbook.Path & «Книга2.xlsx»).Worksheets(1)

        ‘4. Копирование строки.
    shSrc.Rows(2).Copy

        ‘5. Поиск на листе-результате номера.
    On Error Resume Next
    r = WorksheetFunction.Match(shSrc.Range(«A2»).Value, shRes.Columns(«A»), 0)
    On Error GoTo 0

        ‘6. Если номер не найден, то поиск последней строки.
        ‘ End не ищет в скрытых строках.
    If r = 0 Then
        r = shRes.Cells(shRes.Rows.Count, «A»).End(xlUp).Row + 1
    End If

        ‘7. Вставка скопированных данных.
    shRes.Rows(r).PasteSpecial xlPasteAll

        ‘8. Выход из режима копирования.
    Application.CutCopyMode = False

        ‘9. Сохранение и закрытие файла-результата.
    shRes.Parent.Save
    shRes.Parent.Close SaveChanges:=False

            ’10. Вкл. монитора.
    Application.ScreenUpdating = True

        ’11. Сообщение, чтобы юзер понял, что макрос сделал работу.
    MsgBox «Готово.», vbInformation

    End Sub

[свернуть]

Понравилась статья? Поделить с друзьями:
  • Макрос добавление кнопки excel
  • Макрос добавить строку в таблицу excel
  • Макрос для чистки excel
  • Макрос для чекбокса excel
  • Макрос для форматирования текста в excel