Предположим, у вас есть диапазон данных, и вы хотите автоматически вставлять пустые строки выше или ниже определенного значения в Excel, например, автоматически вставлять строки ниже нулевого значения, как показано ниже. В Excel нет прямого способа решить эту задачу, но я могу ввести код макроса для автоматической вставки строк на основе определенного значения в Excel.
Вставить строку ниже на основе значения ячейки с помощью VBA
Вставьте строку выше на основе значения ячейки с помощью Kutools for Excel
Чтобы вставить строку на основе значения ячейки, запустив 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 нажмите кнопку, появится диалоговое окно и выберите столбец, содержащий ноль. Смотрите скриншот:
4. Нажмите OK. Тогда пустые строки будут вставлены ниже нулевого значения.
Функции:
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
Если вы не знакомы с VBA, вы можете попробовать Kutools for Excel‘s Выбрать определенные ячейки утилита, а затем вставьте строки выше.
После установки Kutools for Excel, пожалуйста, сделайте следующее:(Бесплатная загрузка Kutools for Excel Сейчас!)
1. Выберите список, из которого вы хотите найти определенные ячейки, и нажмите Кутулс > Выберите > Выбрать определенные ячейки. Смотрите скриншот:
2. В появившемся диалоговом окне отметьте Весь ряд вариант, а затем перейдите, чтобы выбрать Равно от Конкретный тип список, а затем введите значение, которое вы хотите найти, в правом текстовом поле. Смотрите скриншот:
3. Нажмите Ok, и появится диалоговое окно, напоминающее количество выбранных строк, просто закройте его.
4. Поместите курсор в одну выбранную строку и щелкните правой кнопкой мыши, чтобы выбрать Вставить из контекстного меню. Смотрите скриншот:
Теперь строки вставляются выше на основе определенного значения.
Относительные статьи:
- Вставить пустые строки в Excel
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (43)
Оценок пока нет. Оцените первым!
0 / 0 / 0 Регистрация: 10.12.2011 Сообщений: 42 |
|
1 |
|
Макрос на добавление строки при условии06.09.2012, 13:52. Показов 10897. Ответов 3
Добрый день!
0 |
Busine2012 1300 / 402 / 22 Регистрация: 21.10.2011 Сообщений: 1,285 |
||||
06.09.2012, 14:30 |
2 |
|||
1 |
Все имена заняты 1250 / 408 / 52 Регистрация: 14.06.2009 Сообщений: 629 |
||||
06.09.2012, 16:41 |
3 |
|||
Busine2012, но ведь уже при Мой вариант:
2 |
Busine2012 1300 / 402 / 22 Регистрация: 21.10.2011 Сообщений: 1,285 |
||||
06.09.2012, 16:48 |
4 |
|||
Код в сообщении #2 нерабочий, вот правильный вариант:
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
06.09.2012, 16:48 |
Помогаю со студенческими работами здесь Нужен макрос удаляющий значения в диапазоне ячеек при условии Макрос, который перебирает диапазон ячеек и при условии выводит текст Создать макрос, отрабатывающий при условии, что активна определенная ячейка Макрос, что бы при определенном условии закрашивались ячейки в необходимый цвет Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 4 |
Добавление строк в зависимости от условия |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Добрый день!
Возник вопрос, связанный с темой
задача следующего плана, нужно вставить некоторое кол-во строк в зависимости от значения в ячейках колонки А
например
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
[свернуть]