Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Макрос вставки строк с последующим в них копированием, Макрос вставки строк в очень длинный список
 
Добрый день, ни как не могу справиться с макросом.
В столбце (G код для управления чпу) есть постоянно повторяющиеся ячейки
Код
 G1Z-1
G1Z1

Мне их надо заменить на
Код
M106 P1 S200
G04 P30
M107
G04 P30


Измучился.. Вроде получилось сначало, но проблема дальше 16387 строки не вставляет ошибка 1004 выдает. А сейчас и вовсе не туда строчки вставляет.. Подскажите как подправить.
Код
Sub Макрос1()
'
' Макрос1 Макрос


 L = Cells(1, 1).Value
 n = 5
 m = 5
 
 For W = 1 To L 'количество ячеек вправо

    Cells(m, n).Select
    Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
    Cells(m, n).Select
    Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove        
   
   n = n + 4
   m = m + 4
         
  Next W
  End Sub


Строк много-много порядка 30000 шт
Не могу прикрепить файл он весит 189 кб (как не уменьшал..)
 
Кол-во столбцов в листе Excel 2007 = 16384
Зачем в Cells(m, n) "наращиваете" n? Столбец-то, вероятно, не дОлжно менять?
Изменено: Ёк-Мок - 30 Мар 2015 15:34:31
Конь, просто конь.
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Еще я бы убрал все селекты, отключил экран  и шел бы от последней строки к первой, а не наоборот.
Цитата
artclonic написал: Строк много-много порядка 30000 шт
artclonic, не надо на 30000, выкладывайте пример на пару десятков строк.
Я сам - дурнее всякого примера! ...
 
Цитата
artclonic написал:
Вроде получилось сначало
Что-то признаков замены в коде не наблюдается. Как понял:
Код
Sub Artclonic()
Const NEWVAL = "M106 P1 S200|G04 P30|M107|G04 P30"

Dim c As Range, a$, aNV, cl As New Collection
aNV = Application.Transpose(Split(NEWVAL, "|"))
Set c = Range("E:E").Find("G1Z-1", , xlValues, xlWhole, , xlPrevious, True)
If Not c Is Nothing Then
  a = c.Address
  Do
    If c.Offset(1).Value = "G1Z1" Then cl.Add c
    Set c = Range("E:E").FindPrevious(c)
  Loop Until c.Address = a
  For Each c In cl
    c.Resize(2).EntireRow.Insert
    c.Offset(-2).Resize(4).Value = aNV
  Next
End If
End Sub
Страницы: 1
Читают тему (гостей: 1)