Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вставить пустые строки и заполнить их по условию. - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вставить пустые строки и заполнить их по условию. (Макросы/Sub)
Вставить пустые строки и заполнить их по условию.
Romanych Дата: Воскресенье, 08.10.2017, 01:57 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый вечер.
Который день бьюсь над задачей, но знаний не хватает.
Решил попросить помощи.
Есть данные в Excel.
Нужно вставить 2 пустые строки между строкой со словом "пикет" и строкой со словом "ориентир" (текст всегда находится в столбце "I"), вставлять строки нужно только там, где "пикет" и "ориентир" идут подряд.
Затем в эти пустые строки нужно скопировать строки со словами "ориентир" и "станция" (тоже только те, которые идут подряд).
Со вставкой пустых строк я разобрался, а вот скопировать в них необходимые данные никак не выходит.
Надеюсь глядя на пример будет немного понятней.
К сообщению приложен файл: _05-10.xls(71Kb)
 
Ответить
СообщениеДобрый вечер.
Который день бьюсь над задачей, но знаний не хватает.
Решил попросить помощи.
Есть данные в Excel.
Нужно вставить 2 пустые строки между строкой со словом "пикет" и строкой со словом "ориентир" (текст всегда находится в столбце "I"), вставлять строки нужно только там, где "пикет" и "ориентир" идут подряд.
Затем в эти пустые строки нужно скопировать строки со словами "ориентир" и "станция" (тоже только те, которые идут подряд).
Со вставкой пустых строк я разобрался, а вот скопировать в них необходимые данные никак не выходит.
Надеюсь глядя на пример будет немного понятней.

Автор - Romanych
Дата добавления - 08.10.2017 в 01:57
K-SerJC Дата: Воскресенье, 08.10.2017, 11:51 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 283
Репутация: 39 ±
Замечаний: 0% ±

Excel 2013
Со вставкой пустых строк я разобрался,

В вашем примере нет кода как вы это делаете.
если вы разобрались как вставить строки, то дальше я бы так сделал
запомнил вставленые строки как объект range

затем цикл по строкам вверх с поиском значения "станция"
если нашел и значение на один выше="ориентир", то это нужные нам строки
копируем в массив значения затем значениям сохраненого объекта присваиваем этот массив.


Благими намерениями выстелена дорога в АД.

Сообщение отредактировал K-SerJC - Воскресенье, 08.10.2017, 11:52
 
Ответить
Сообщение
Со вставкой пустых строк я разобрался,

В вашем примере нет кода как вы это делаете.
если вы разобрались как вставить строки, то дальше я бы так сделал
запомнил вставленые строки как объект range

затем цикл по строкам вверх с поиском значения "станция"
если нашел и значение на один выше="ориентир", то это нужные нам строки
копируем в массив значения затем значениям сохраненого объекта присваиваем этот массив.

Автор - K-SerJC
Дата добавления - 08.10.2017 в 11:51
Romanych Дата: Воскресенье, 08.10.2017, 12:49 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо за отклик.

В вашем примере нет кода как вы это делаете.

на просторах интернета нашел код и подогнал его под свои нужды:
[vba]
Код

Sub обработка()
Dim i As Long
Application.ScreenUpdating = False
For i = Range("I" & Rows.Count).End(xlUp).Row To 1 Step -1
If Range("I" & i) = "пикет" And Range("I" & i + 1) = "ориентир" Then Rows(1 + i).Resize(2).EntireRow.Insert
Next i
Application.ScreenUpdating = True
End Sub
[/vba]

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


Сообщение отредактировал Romanych - Воскресенье, 08.10.2017, 12:52
 
Ответить
СообщениеСпасибо за отклик.

В вашем примере нет кода как вы это делаете.

на просторах интернета нашел код и подогнал его под свои нужды:
[vba]
Код

Sub обработка()
Dim i As Long
Application.ScreenUpdating = False
For i = Range("I" & Rows.Count).End(xlUp).Row To 1 Step -1
If Range("I" & i) = "пикет" And Range("I" & i + 1) = "ориентир" Then Rows(1 + i).Resize(2).EntireRow.Insert
Next i
Application.ScreenUpdating = True
End Sub
[/vba]

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

Автор - Romanych
Дата добавления - 08.10.2017 в 12:49
K-SerJC Дата: Понедельник, 09.10.2017, 17:10 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 283
Репутация: 39 ±
Замечаний: 0% ±

Excel 2013
так?
[vba]
Код

Sub обработка()
Dim i As Long, k As Long, arr(), str
Application.ScreenUpdating = False
For i = Range("I" & Rows.Count).End(xlUp).Row To 1 Step -1
If Range("I" & i) = "пикет" And Range("I" & i + 1) = "ориентир" Then
Rows(1 + i).Resize(2).EntireRow.Insert
str = ""
For k = i To 2 Step -1
If Range("I" & k) = "станция" And Range("I" & k - 1) = "ориентир" Then
str = k - 1 & ":" & k
arr() = ActiveSheet.Range(str).Value
Exit For
End If
Next k
If str <> "" Then
str = i + 1 & ":" & i + 2
ActiveSheet.Range(str).Value = arr()
End If
End If
Next i
Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: Romanych.xls(82Kb)


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщениетак?
[vba]
Код

Sub обработка()
Dim i As Long, k As Long, arr(), str
Application.ScreenUpdating = False
For i = Range("I" & Rows.Count).End(xlUp).Row To 1 Step -1
If Range("I" & i) = "пикет" And Range("I" & i + 1) = "ориентир" Then
Rows(1 + i).Resize(2).EntireRow.Insert
str = ""
For k = i To 2 Step -1
If Range("I" & k) = "станция" And Range("I" & k - 1) = "ориентир" Then
str = k - 1 & ":" & k
arr() = ActiveSheet.Range(str).Value
Exit For
End If
Next k
If str <> "" Then
str = i + 1 & ":" & i + 2
ActiveSheet.Range(str).Value = arr()
End If
End If
Next i
Application.ScreenUpdating = True
End Sub
[/vba]

Автор - K-SerJC
Дата добавления - 09.10.2017 в 17:10
Romanych Дата: Понедельник, 09.10.2017, 18:52 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
так?

Именно то, что было нужно.
Спасибо за помощь.
 
Ответить
Сообщение
так?

Именно то, что было нужно.
Спасибо за помощь.

Автор - Romanych
Дата добавления - 09.10.2017 в 18:52
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вставить пустые строки и заполнить их по условию. (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!