Страницы: 1
RSS
Автоматическая перенумерация после удаления строк, Макрос удаляет произвольную строку, в этом же макросе после удаления необходимо перенумеровать ячейки в столбце №п/п
 
Здравствуйте! Пытаюсь освоить макросы. Поискал по форму, но не нашел чтоб один в один, пытался поменять, не получается то, что надо. Суть:
При выборе строки с курсором кнопкой выше удаляется вся строка. Необходимо, чтобы одновременно происходила перенумерация в столбце "№п/п" только по непустым строкам. Строк может быть очень много, таблица накопительная. Например: удаляется 10 строка (№п/п 5), значения в диапазоне Range("A6:An"), где n=7,8 и т.д. автоматически перенумеровываются с 1 до n+1, где n=1,2,3 и т.д Как прикрутить данное решение в уже имеющийся макрос? Заранее благодарю
 
а тупа =МАКС($A$5:$A6)+1 ?
не нужно оскорблять.
 
Перебрать циклом строки и пронумеровать.
 
А еще можно формулу использовать в столбце А.
Код
=ЕСЛИ(ЕПУСТО(B6);"";МАКС($A$5:A5)+1)
 
Цитата
gling написал:
А еще можно формулу использовать в столбце А.
Если бы так просто, я пробовал через ПОИСКПОЗ. Но там еще с другого листа макросом вставляет данные в строку, тогда ругается на формулу в ячейках столбца А
 
Ваш код с "добавкой" ))
Код
Sub Удалить()
Dim i As Long, n As Long
  ST = Selection.Row
  ps = Range("A" & Rows.Count).End(xlUp).Row
  If ST < 1 Or ST > ps + 1 Then
    MsgBox "УДАЛИТЬ МОЖНО ТОЛЬКО ТУ СТРОКУ, НА КОТОРОЙ СТОИТ КУРСОР (кроме первой пустой) !"
    Exit Sub
  End If
  Rows(Selection.Row).Delete Shift:=xlUp
  For i = 6 To ps - 1
    n = n + 1
    Cells(i, 1) = n
  Next
End Sub
 
Цитата
Юрий М написал:
Перебрать циклом строки и пронумеровать.
Вот чувствую, что как-то так, но: 1) сам уже голову сломал, тяжеловато для новичка 2)Цикл при большом числе записей может притормаживать работу. Если другого кроме цикла ничего не выйдет, придется делать кнопку с макросом выгрузки в архив. Правда, я и цикл не соображу как делать в данном случае
Изменено: dixus - 10.12.2015 20:54:14
 
Цитата
dixus написал:
придется делать кнопку с макросом
Зачем? См. код выше. Только, если возможно удаление сразу нескольких строк, то нужно перед циклом переопределить значение переменной ps.
 
Уже попробовал. Удалять планируется по одной строке за раз, не сразу несколько. Спасибо, все как надо. Вопрос - i - это номер строки, с которой надо делать перенумерацию, насколько понял и ps - 1 нужно для исключения из перенумерации номера строки с заголовками таблицы? Видимо, в этом лоханулся. У меня код поначалу был более громоздким, номера ставило на 2 меньше.  
 
В ставьте в ваш код в конец такой фрагмент
Код
  Cells(6, 1) = 1
  PS = Range("A" & Rows.Count).End(xlUp).Row
  If PS > 6 Then
    With Range(Cells(7, 1), Cells(PS, 1))
      .Formula = "=A6+1"
      .Value = .Value
    End With
  End If
 
Также спасибо. Выше уже попробовал, все работает. Попробую Ваше решение. Что значит 7 и 1 в "Cells(7, 1)" Cells - ячейка, 7 - следующая строка, 1 - какой-то параметр, правильно?
 
Цитата
dixus написал:
Вопрос - i - это номер строки, с которой надо делать перенумерацию, насколько понял и ps - 1 нужно для исключения из перенумерации номера строки с заголовками таблицы?
i - это переменная-счётчик цикла. А цикл начинаем с шестой строки.
ps-1 - последняя строка минус единица, чтобы не нумеровать "лишнюю" строку в конце таблицы.
 
Спасибо, немного не так понимал. ВСе начинается с малого.
 
Цитата
Что значит 7 и 1 в "Cells(7, 1)
Это ячейка А7
 
Ясно. А 1 - это что?

Спасибо всем, все работает. Все оказалось просто, а день мучаюсь с учебником и кусками кода из нета. Метод тыка и практики. Модераторам - тему можно закрывать.
 
Цитата
dixus написал:
А 1 - это что?
Cells(7,1) - ячейка со строкой №7 и столбцом №1 ))
 
Спасибо, доходчиво. Нудно учебник штудировать, забываешь потом, а через знающих людей и собственную практику лучше доходит
 
Полезная тема, применил описанное выше у себя в файле :)
Страницы: 1
Наверх