Добрый вечер. Который день бьюсь над задачей, но знаний не хватает. Решил попросить помощи. Есть данные в Excel. Нужно вставить 2 пустые строки между строкой со словом "пикет" и строкой со словом "ориентир" (текст всегда находится в столбце "I"), вставлять строки нужно только там, где "пикет" и "ориентир" идут подряд. Затем в эти пустые строки нужно скопировать строки со словами "ориентир" и "станция" (тоже только те, которые идут подряд). Со вставкой пустых строк я разобрался, а вот скопировать в них необходимые данные никак не выходит. Надеюсь глядя на пример будет немного понятней.
Добрый вечер. Который день бьюсь над задачей, но знаний не хватает. Решил попросить помощи. Есть данные в Excel. Нужно вставить 2 пустые строки между строкой со словом "пикет" и строкой со словом "ориентир" (текст всегда находится в столбце "I"), вставлять строки нужно только там, где "пикет" и "ориентир" идут подряд. Затем в эти пустые строки нужно скопировать строки со словами "ориентир" и "станция" (тоже только те, которые идут подряд). Со вставкой пустых строк я разобрался, а вот скопировать в них необходимые данные никак не выходит. Надеюсь глядя на пример будет немного понятней.Romanych
В вашем примере нет кода как вы это делаете. если вы разобрались как вставить строки, то дальше я бы так сделал запомнил вставленые строки как объект range
затем цикл по строкам вверх с поиском значения "станция" если нашел и значение на один выше="ориентир", то это нужные нам строки копируем в массив значения затем значениям сохраненого объекта присваиваем этот массив.
В вашем примере нет кода как вы это делаете. если вы разобрались как вставить строки, то дальше я бы так сделал запомнил вставленые строки как объект range
затем цикл по строкам вверх с поиском значения "станция" если нашел и значение на один выше="ориентир", то это нужные нам строки копируем в массив значения затем значениям сохраненого объекта присваиваем этот массив.K-SerJC
Благими намерениями выстелена дорога в АД.
Сообщение отредактировал K-SerJC - Воскресенье, 08.10.2017, 11: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]
То, что Вы советуете - я головой понимаю, но осуществить не получается, т.к. знаний по написанию кода у меня нету. А найти подходящий код и оптимизировать под себя не удалось. Если не затруднит, может поможете на примере?
на просторах интернета нашел код и подогнал его под свои нужды: [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
Сообщение отредактировал Romanych - Воскресенье, 08.10.2017, 12:52
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]
так? [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